Web Annotation Data Model: Range of Bodies and Targets - Illustrations

W3C Document

Latest editor's draft:
http://w3c.github.io/web-annotation/model/wd/RequireSpecificResource.html
Editors:
(University of Illinois at UC)
(University of Illinois at UC)
(Stanford University)
Repository:
Github Repository

Abstract

Status of This Document

This document is merely a W3C-internal document. It has no official standing of any kind and does not represent consensus of the W3C Membership.

1. Introduction

Now that we will have a way (oa:hasRole) to express roles for instances of oa:SpecificResource (at least), a proposal has been made that our data model should require the use of oa:SpecificResource for Bodies and Targets -- i.e., proposing that oa:SpecificResource and Simple Textual Bodies (literals) should be the entire range of oa:hasBody and oa:SpecificResource should be the entire range of oa:hasTarget. For additional background and context regarding this proposal see [annotation-roles], in particular Section 3.2.1 Require the use of SpecficResources for Bodies and Section 3.2.2 Require the use of SpecificResource for Targets.

An alternate, competing proposal also has been made to allow oa:hasRole on instances of a new oa:EmbeddedContent subclass (oa:EmbeddedTextualBody), which would be allowed as a Body, and potentially on instances of multiplicity classes (oa:Choice, oa:Composite, oa:List or corresponding new subclasses), all of which would continue to be allowed as Bodies and Targets. For more details on the first part of this alternative proposal, see Section 3.2.3 Allow hasRole on new EmbeddedTextualBody class.

This document, created to facilitate discussion within the Working Group, presents illustrations of how annotation descriptions would change if one or the other of these proposal were adopted. Note, though stimulated and to a large degree motivated by the discussion leading to the creation of the oa:hasRole property, the first of these proposals espcially has implications for annotations where oa:hasRole is not used. The serialization illustrations below parallel the illustrations in the annotation-roles document, and examples 3.1.1, 3.1.2 and 3.1.11 include illustrations of how annotation descriptions not involving oa:hasRole might change if the proposal to require SpecificResources for Bodies and Targets were to be adopted.

2. Summary of Potential Data Model Changes

Implementing either proposal - i.e., requiring SpecificResources for Bodies and Targets or instead allowing hasRole on EmbeddedTextualBody and potentially on Multiplicity classes/subclasses - has implications for the Web Annotation Data Model [annotation-model] over and above those described in Section 2 of the annotation-roles document. (Note, all references in this document to the Web Annotation Data Model are to the First Public Working Draft version, 11 Dec 2014, of the model.)

2.1 Proposal 1: SpecificResource required for All Bodies and Targets (still allow Simple Textual Bodies)

  1. The domain of oa:hasRole would be oa:SpecificResource.
  2. Simple Textual Bodies (i.e., string literals) would still be allowed, but as discussed elsewhere, Simple Textual Bodies cannot have a role nor any other property; they are simply string literals with no embellishments.
  3. Instances of oa:SpecificResource (with optional hasRole property) would be allowed as Bodies or Targets.
  4. Instances of oa:EmbeddedContent could appear as the Source (aka Content) of SpecificResources used as Bodies, but not directly as a Body.
  5. Instances of Multiplicity classes (i.e., oa:Choice, oa:Composite, and oa:List) could appear as the Source (aka Content) of oa:SpecificResources used as Bodies or Targets, but not directly as a Body or Target.
  6. External-to-the-annotation Web Resources could appear as the Source (aka Content) of oa:SpecificResources used as Bodies or Targets, but not directly as a Body or Target.

Still unclear (and not addressed in this document) is the question of whether the range of oa:item and oa:member (appearing in multiplicity patterns) would also be limited oa:SpecificResource.

2.2 Proposal 2: SpecificResource, EmbeddedTextualBody and (potentially) Multiplicity classes/subclasses all allowed as Bodies and Targets

  1. oa:EmbeddedTextualBody is created as a new subclass of oa:EmbeddedContent.
  2. The domain of oa:hasRole would be oa:SpecificResource, oa:EmbeddedTextualBody and (potentially) new subclasses of oa Multiplicity classes.
  3. Simple Textual Bodies (i.e., string literals) would still be allowed, but as discussed elsewhere, Simple Textual Bodies cannot have a role nor any other property; they are simply string literals with no embellishments.
  4. Instances of oa:SpecificResource (with optional hasRole property) would be allowed as Bodies or Targets.
  5. Instances of EmbeddedTextualBody (with optional hasRole property) would be allowed as Bodies.
  6. Instances of Choice, Composite and List or corresponding new subclasses (each with optional hasRole property) would be allowed as Bodies or Targets.
  7. An external-to-the-annotation Web Resource without an explicit role could appear directly as a Body or Target.
  8. An external-to-the-annotation Web Resource for which an explicit role needs to be expressed could appear as the Source (aka Content) of a SpecificResource used as Body or Target, but not directly as a Body or Target.

Note, still unclear (and only briefly and incompletely addressed in this document) is how hasRole should be used with Multiplicity. Should a multiplicity construct (e.g., Composite) have a role, or should only the items or members of the Multiplicity have roles, or should both be allowed to have an explicit role?

2.3 Assumptions

  1. Where needed, we have used @id and @type (instead of id and type) in our JSON serialization, in accord with resolution reached during 09 Sep 2015 WG Telecon. See Topic 3 from [annotation-WG-09Sep2015-minutes].
  2. In accord with recent WG consensus, for these illustrations we have required @type for oa:Annotation and for oa Multiplicity classes/subclasses, but not for oa:SpecificResource, nor for oa:EmbededTextualBody. See model serialization [annotation-issue-67].

3. Consequences of Proposals

3.1 Illustration of Differences

The enumeration from the [annotation-roles] discussion document is adopted here to facilitate an orderly follow-on discussion.

3.1.1 Resource Example

When associating the commenting role with a body that has a URI (i.e., an external to the annotation Web Resource) the body MUST be a SpecificResource, so neither proposal has impact. However in the absence of a role the proposed requirement to always use SpecificResource for the Body / Target would complicate the serialization slightly.

No Role needed (current, i.e., FPWD, model).

Example 1: No roles, current model (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target": "http://example.org/target1",
  "body": {"@id": "http://example.org/body1" } 
}
Example 2: No roles, current model (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget <http://example.org/target1> ;
    oa:hasBody <http://example.org/body1> .

No Role needed, but Body and Target must be SpecificResources (proposal 1).

Example 3: No roles, SpecificResource required (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target": {"source": "http://example.org/target1"},
  "body": { "source": "http://example.org/body1" } 
}
Example 4: No roles, SpecificResource required (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget [ oa:hasSource <http://example.org/target1> ] ;
    oa:hasBody [ oa:hasSource <http://example.org/body1> ] .

Role needed for Body, SpecificResource Required for Body and Target (proposal 1).

Example 5: Basic Roles, SpecificResource required (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target": {"source": "http://example.org/target1"},
  "body": {
    "role": "commenting",
    "source": "http://example.org/body1"
  } 
}
Example 6: Basic Roles, SpecificResource required (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget [ oa:hasSource <http://example.org/target1> ] ;
    oa:hasBody [
        oa:hasRole oa:commenting ;
        oa:hasSource <http://example.org/body1> ] .

Role needed for Body, allow other than SpecificResource as Target (proposal 2).

Example 7: Body Role, SpecificResource NOT required for Target (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target": "http://example.org/target1" ,
  "body": {
    "role": "commenting",
    "source": "http://example.org/body1" }
}
Example 8: Body Role, SpecificResource NOT required for Target (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget <http://example.org/target1> ;
    oa:hasBody [
                oa:hasRole oa:commenting ;
                oa:hasSource <http://example.org/body1> ] .

3.1.2 Text Example

Illustrating Textual Body Annotations.

No Role needed, Simple Textual Body (current model):

Example 9: Simple Textual Body (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target": "http://example.org/target1",
  "body": "I love this thing"
}
Example 10: Simple Textual Body (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget <http://example.org/target1> ;
    oa:hasBody "I love this thing" .

No Role needed, Embedded Content (current model with oa:text replacing rdf:value):

Example 11: Embedded Content (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target": "http://example.org/target1",
  "body": {"text": "I love this thing"}
}
Example 12: Embedded Content (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget <http://example.org/target1> ;
    oa:hasBody [ oa:text "I love this thing" ] .

No Role needed, Body and Target must be SpecificResource (proposal 1):

Example 13: Embedded Text, SpecificResources Required (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target": { "source": "http://example.org/target1" },
  "body": { "source": { "text": "I love this thing" }  } 
}
Example 14: Embedded Text, SpecificResources Required (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget [ oa:hasSource <http://example.org/target1> ] ;
   oa:hasBody [ oa:hasSource [ oa:text "I love this thing" ] ] .

Role needed for Body, Body and Target must be SpecificResource (proposal 1):

Example 15: Body has Role, Embedded Text, SpecificResource Required as Target (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target": { "source": "http://example.org/target1" },
  "body": {
    "role": "commenting",
    "source": { "text": "I love this thing", }}
  } 
}
Example 16: Body has Role, Embedded Text, SpecificResource Required as Target(Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget [ oa:hasSource <http://example.org/target1> ];
    oa:hasBody [
        oa:hasRole oa:commenting ;
        oa:hasSource [ oa:text "I love this thing" ] ].

Role needed for Body, Body may be EmbeddedTextualBody (proposal 2):

Example 17: Basic Text Comment (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target": "http://example.org/target1",
  "body": {
    "role": "commenting",
    "text": "I love this thing"  } 
}
Example 18: Basic Text Comment (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget <http://example.org/target1> ;
    oa:hasBody [ 
                 oa:hasRole oa:commenting ;
                 oa:text "I love this thing" ] .

3.1.3 Text Tag Example

Associating the tagging role with textual content carried in the annotation.

Proposal 1 (SpecificResources Required):
Example 19: Basic Text Tag - Proposal 1 (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target": {"source": "http://example.org/target1" } ,
  "body": {
    "role": "tagging",
    "source": {"text": "the text of the tag"}
  } 
}
Example 20: Basic Text Tag - Proposal 1 (Turtle)
<http://example.org/anno1> a oa:Annotation ;
  oa:hasTarget [oa:hasSource <http://example.org/target1> ] ;
  oa:hasBody [
    oa:hasRole oa:tagging ;
    oa:hasSource [ oa:text "the text of the tag" ]
  ]
Proposal 2 (EmbeddedTextualBody, a new subclass of EmbeddedContent):
Example 21: Basic Text Tag - Proposal 2 (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target": "http://example.org/target1",
  "body": {
    "role": "tagging",
    "text": "the text of the tag"
  } 
}
Example 22: Basic Text Tag - Proposal 2 (Turtle)
<http://example.org/anno1> a oa:Annotation ;
  oa:hasTarget <http://example.org/target1> ;
  oa:hasBody [
    oa:hasRole oa:tagging ;
    oa:text "the text of the tag"
  ]

3.1.4 Multiple Text Tags

Associating the tagging role with each of multiple tags in the same annotation.

Proposal 1 (SpecificResources Required):
Example 23: Multiple Text Tags (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target": {"source": "http://example.org/target1"} ,
  "body": [
    {
      "role": "tagging",
      "source": {"text": "tag"}
    },
    {
      "role": "tagging",
      "source": {"text": "another"}
    }
  ]
}
Example 24: Multiple Text Tags (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget [oa:hasSource <http://example.org/target1> ] ;
    oa:hasBody [
        oa:hasRole oa:tagging ;
        oa:hasSource [ oa:text "tag" ]
    ], [
        oa:hasRole oa:tagging ;
        oa:hasSource [ oa:text "another" ]
    ]
Proposal 2 (EmbeddedTextualBody):
Example 25: Multiple Text Tags (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target": "http://example.org/target1",
  "body": [
    {
      "role": "tagging",
      "text": "tag"
    },
    {
      "role": "tagging",
      "text": "another"
    }
  ]
}
Example 26: Multiple Text Tags (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget <http://example.org/target1> ;
    oa:hasBody [
        oa:hasRole oa:tagging ;
        oa:text "tag" 
    ], [
        oa:hasRole oa:tagging ;
        oa:text "another"
    ]

3.1.5 Semantic Tag Example

Associating the tagging role with a URI, often called a semantic tag as it avoids the ambiguity of plain text strings.

For the Body there is no choice here, as the resource MUST be a SpecificResource; it makes a difference, however, for how the Target is described.

Proposal 1 (Require oa:SpecificResource for Target):
Example 27: Semantic Tag (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target": {"source" : "http://example.org/target1" },
  "body": {
    "role": "tagging",
    "source": "http://example.org/tag1"
  } 
}
Example 28: Semantic Tag (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget [oa:hasSource <http://example.org/target1> ] ;
    oa:hasBody [
        oa:hasRole oa:tagging ;
        oa:hasSource <http://example.org/tag1>
    ]
Proposal 2 (Do NOT require oa:SpecificResource for Target):
Example 29: Semantic Tag (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target":  "http://example.org/target1",
  "body": {
    "role": "tagging",
    "source": "http://example.org/tag1"
  } 
}
Example 30: Semantic Tag (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget <http://example.org/target1> ;
    oa:hasBody [
        oa:hasRole oa:tagging ;
        oa:hasSource <http://example.org/tag1>
    ]

3.1.6 Multiple Bodies Example

An annotation with multiple bodies with different roles. It associates a URI as a tag, and some textual content as a comment, with the same target resource.

Proposal 1 (SpecificResources Required):
Example 31: Multiple Bodies (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target": {"source": "http://example.org/target1" },
  "body": [{
      "role": "tagging", 
      "source": "http://example.org/tag1"
    },
    {
      "role": "commenting", 
      "source": {
        "text": "I <b>love</b> this thing ",
        "format": "text/html",
        "language": "en"
      }
    }
  ]
}
Example 32: Multiple Bodies (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget [oa:hasSource <http://example.org/target1> ] ;
    oa:hasBody [
        oa:hasRole oa:tagging ;
        oa:hasSource <http://example.org/tag1>
    ],
    [
        oa:hasRole oa:commenting ;
        oa:hasSource [ 
            oa:text "I <b>love</b> this thing" ;
            dc:format "text/html" ;
            dc:language "en"
        ]
    ]
Proposal 2 (SpecificResource + EmbeddedTextualBody):
Example 33: Multiple Bodies (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target":  "http://example.org/target1",
  "body": [{
      "role": "tagging", 
      "source": "http://example.org/tag1"
    },
    {
      "role": "commenting", 
      "text": "I <b>love</b> this thing",
      "format": "text/html",
      "language": "en"
    }
  ]
}
Example 34: Multiple Bodies (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget <http://example.org/target1> ;
    oa:hasBody [
        oa:hasRole oa:tagging ;
        oa:hasSource <http://example.org/tag1>
    ],
    [
        oa:hasRole oa:commenting ;
        oa:text "I <b>love</b> this thing" ;
        dc:format "text/html" ;
        dc:language "en"
    ]

3.1.7 Multiple Bodies Example (2)

An annotation with multiple bodies with different roles. It associates a comment and an edit with a specific segment of a resource.

Proposal 1 (SpecificResources Required):
Example 35: Multiple Bodies (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target": {
    "selector": {
      "@type": "TextQuoteSelector",
      "prefix": "This is before a ",
      "exact": "misteak",
      "suffix": " and this is after it."
    },
    "source": "http://example.com/target.html"
  },
  "body": [
    {
      "role": "commenting", 
      "source": {
        "text": "There is a <b>typo</b> here, it should be 'mistake'.",
        "format": "text/html",
        "language": "en"
      }
    },
    {
      "role": "editing",
      "source": {
        "text": "mistake",
        "format": "text/plain",
        "language": "en"
      }
    }
  ]
}
Example 36: Multiple Bodies (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget  [
      oa:hasSelector [
        a oa:TextQuoteSelector ;
        oa:prefix "This is before a " ;
        oa:exact "misteak" ;
        oa:suffix " and this is after it."
      ];
      oa:hasSource <http://example.com/target.html>
    ];
    oa:hasBody [
        oa:hasRole oa:commenting ;
        oa:hasSource [ 
            oa:text "There is a <b>typo</b> here, it should be 'mistake'." ;
            dc:format "text/html" ;
            dc:language "en"
        ]
    ],
    [
        oa:hasRole oa:editing ;
        oa:hasSource [ 
            oa:text "mistake" ;
            dc:format "text/plain" ;
            dc:language "en"
        ]
    ]
Proposal 2 (EmbeddedTextualBody):
Example 37: Multiple Bodies (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target": {
    "selector": {
      "@type": "TextQuoteSelector",
      "prefix": "This is before a ",
      "exact": "misteak",
      "suffix": " and this is after it."
    },
    "source": "http://example.com/target.html"
  },
  "body": [
    {
      "role": "commenting", 
      "text": "There is a <b>typo</b> here, it should be 'mistake'.",
      "format": "text/html",
      "language": "en"
    },
    {
      "role": "editing",
      "text": "mistake",
      "format": "text/plain",
      "language": "en"
    }
  ]
}
Example 38: Multiple Bodies (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget  [
      oa:hasSelector [
        a oa:TextQuoteSelector ;
        oa:prefix "This is before a " ;
        oa:exact "misteak" ;
        oa:suffix " and this is after it."
      ];
      oa:hasSource <http://example.com/target.html>
    ];
    oa:hasBody [
        oa:hasRole oa:commenting ;
        oa:text "There is a <b>typo</b> here, it should be 'mistake'." ;
        dc:format "text/html" ;
        dc:language "en"
    ],
    [
        oa:hasRole oa:editing ;
        oa:text "mistake" ;
        dc:format "text/plain" ;
        dc:language "en"
    ]

3.1.8 Target with Role Example

A simple highlight is the role of the target in the annotation. The annotation is highlighting the target. There may be no body at all in this case.

Proposal 1 (SpecificResources Required) and Proposal 2 (EmbeddedTextualBody) yield the same serialization:
Example 39: Target with Role (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target": {
      "role": "highlighting",
      "source": "http://example.org/book1#para1"
    }
}
Example 40: Target with Role (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget [
        oa:hasRole oa:highlighting ;
        oa:hasSource <http://example.org/book1#para1> ]

3.1.9 Multiple Targets with Roles Example

A hypothetical example of the use of roles with targets, rather than bodies. This annotation has a single comment about two distinct paragraphs in a text, and the role of each in the annotation is different: one is being compared to the other and it matters which is which. A hypothetical literature set of roles is used to demonstrate the extensibility of the framework. Because the Targets are both fragments of an existing Resource (requiring the use of SpecificResource class), the serialiation of Targets is the same for both proposals, but serialization of the Body is more verbose following Proposal 1.

Proposal 1 (Specific Resources Required).
Example 41: Multiple Targets (JSON-LD)
{
  "@context": ["http://www.w3.org/ns/anno.jsonld", "http://example.org/lit/context.json"],
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "body": {
    "role": "lit:comparing", 
    "source": { "text": "The first passage is a clear derivative of the second" }
  },
  "target": [{
      "role": "lit:antecedent",
      "source": "http://example.org/book1#para1"
    },
    {
      "role": "lit:subsequent",
      "source": "http://example.org/book1#para6"
    }
  ]
}
Example 42: Multiple Targets (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasBody [
        oa:hasRole lit:comparing ;
        oa:hasSource [ oa:text "The first passage is a clear derivative of the second" ] ;
    oa:hasTarget [
        oa:hasRole lit:antecedent ;
        oa:hasSelector [
          a oa:FragmentSelector ;
          rdf:value "para1" ] ;
        oa:hasSource <http://example.org/book1> ],
      [
        oa:hasRole lit:subsequent ;
        oa:hasSelector [
          a oa:FragmentSelector ;
          rdf:value "para6" ] ;
        oa:hasSource <http://example.org/book1> ]
Proposal 2 (EmbeddedTextualBody).
Example 43: Multiple Targets (JSON-LD)
{
  "@context": ["http://www.w3.org/ns/anno.jsonld", "http://example.org/lit/context.json"],
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "body": {
    "role": "lit:comparing", 
    "text": "The first passage is a clear derivative of the second" 
  },
  "target": [{
      "role": "lit:antecedent",
      "source": "http://example.org/book1#para1"
    },
    {
      "role": "lit:subsequent",
      "source": "http://example.org/book1#para6"
    }
  ]
}
Example 44: Multiple Targets (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasBody [
        oa:hasRole lit:comparing ;
        oa:text "The first passage is a clear derivative of the second" ;
    oa:hasTarget [
        oa:hasRole lit:antecedent ;
        oa:hasSelector [
          a oa:FragmentSelector ;
          rdf:value "para1" ] ;
        oa:hasSource <http://example.org/book1> ],
      [
        oa:hasRole lit:subsequent ;
        oa:hasSelector [
          a oa:FragmentSelector ;
          rdf:value "para6" ] ;
        oa:hasSource <http://example.org/book1> ]

3.1.10 Literal Bodies Cannot Have Roles

A simple literal body cannot have a role associated with it, in the same way that it cannot have a format, language, author, license or anything else. If role or other properties are required, one of the above forms must be used.
Example 45: Literal Body without Role (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target": "http://example.com/target1",
  "body": "I like this"
}
Example 46: Literal Body without Role (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget <http://example.com/target1> ;
    oa:hasBody "I like this" .

3.1.11 Choice and List (Multiplicity) with Roles

If Proposal 1 is adopted, Multiplicity classes could be appear as the Source (aka Content) of a SpecificResource (with optional oa:hasRole property) but not directly as a Body or Target.

Example 47: Multiplicity, no role, SpecificResource required (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target":  "http://example.com/target1",
  "body": {
    "source": {
      "@type": "Choice",
      "members": [
        "http://example.org/comment-en",
        "http://example.org/comment-fr"
      ]
    }
  }
}
Example 48: Multiplicity, no role, SpecificResource required (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget <http://example.com/target1> ;
    oa:hasBody [
      oa:hasSource [
        a oa:Choice ;
        oa:members (
          <http://example.org/comment-en>
          <http://example.org/comment-fr>
        )
      ]
    ]
Example 49: Multiplicity, with role, SpecificResource required (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target":  "http://example.com/target1",
  "body": {
    "role": "commenting",
    "source": {
      "@type": "Choice",
      "members": [
        "http://example.org/comment-en",
        "http://example.org/comment-fr"
      ]
    }
  }
}
Example 50: Multiplicity, with role, SpecificResource required (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget <http://example.com/target1> ;
    oa:hasBody [
      oa:hasRole oa:commenting ;
      oa:hasSource [
        a oa:Choice ;
        oa:members (
          <http://example.org/comment-en>
          <http://example.org/comment-fr>
        )
      ]
    ]

If proposal 2 is adopted, the range of oa:hasBody and oa:hasTarget would still include Multiplicity classes.

Example 51: Multiplicity, no Role (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target":  "http://example.com/target1",
  "body": {
    "@type": "Choice",
    "members": [
      "http://example.org/comment-en",
      "http://example.org/comment-fr"
    ]
  }
}
Example 52: Multiplicity, no Role (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget <http://example.com/target1> ;
    oa:hasBody [
        a oa:Choice ;
        oa:members (
          <http://example.org/comment-en>
          <http://example.org/comment-fr>
        )
      ]
    ]

If proposal 2 is adopted, new subclasses of oa:Choice, oa:Composite, and oa:List could be defined each with optional oa:hasRole property. Assuming this approach the domain of oa:hasRole would be oa:SpecificResource, oa:EmbeddedTextualBody, oa:ChoiceWithRole, oa:CompositeWithRole, oa:ListWithRole. Or for consistency, we could define Multiplicity subclasses that are always used with Bodies and Targets (with optional oa:hasRole property), e.g., oa:ChoiceBody / oa:ChoiceTarget, etc.

Example 53: Multiplicity, no Role (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target":  "http://example.com/target1",
  "body": {
    "role": "commenting",
    "@type": "ChoiceWithRole",
    "members": [
      "http://example.org/comment-en",
      "http://example.org/comment-fr"
    ]
  }
}
Example 54: Multiplicity, no Role (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget <http://example.com/target1> ;
    oa:hasBody [
        a oa:Choice ;
        oa:members (
          <http://example.org/comment-en>
          <http://example.org/comment-fr>
        )
      ]
    ]

Alternatively, if proposal 2 is adopted, we could decide that oa:hasRole is not a property to associate with a Multiplicity class as a whole, but rather only with the the individual items or members of a Multiplicity class. If this approach is taken, the domain of oa:hasRole would be oa:SpecificResource and oa:EmbeddedTextualBody. There is increased redundancy with this approach, but also increased flexibility to express nuances (which could also mean increased risk of semantic ambiguity).

Example 55: Multiplicity, no Role (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target":  "http://example.com/target1",
  "body": {
    "@type": "Choice",
    "members": [
      { "source": "http://example.org/comment-en", "role": "commenting" },
      { "source": "http://example.org/comment-fr", "role": "commenting" }
    ]
  }
}
Example 56: Multiplicity, no Role (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget <http://example.com/target1> ;
    oa:hasBody [
        a oa:Choice ;
        oa:members (
          <http://example.org/comment-en>
          <http://example.org/comment-fr>
        )
      ]
    ]

3.1.12 Composites (Multiplicity) with Roles

The composite multiplicity construct suggests the potential of allowing roles on both Multiplicy classes and on individual items and members within the Multiplicity constructs.

Assuming Proposal 1 (SpecificResource required as Body):

Example 57: Multiplicity with Role, SpecificResource Required (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target": {"source": "http://example.com/target1"},
  "body": {
    "role": "review"
    "source": {
      "@type": "Composite",
      "item": [
        {"role": "remarks",
        "source": "http://example.org/body1"},
        {"role": "structured data",
        "source": "http://example.org/body2"}
      ]
    }
  }
}
Example 58: Multiplicity with Role, SpecificResource Required (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget [oa:hasSource <http://example.com/target1>] ;
    oa:hasBody [
      oa:hasRole oa:review ;
      oa:hasSource [
        a oa:Composite ;
        oa:item ([
          oa:hasRole oa:remarks ;
          oa:hasSource <http://example.org/body1>] ;
          [oa:hasRole oa:structured_data ;
          oa:hasSource <http://example.org/body2>]
        )
      ]
    ] .

Assuming Proposal 2

Example 59: Multiplicity with Role, SpecificResource NOT Required (JSON-LD)
{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "@id": "http://example.org/anno1",
  "@type": "Annotation",
  "target": {"source": "http://example.com/target1"},
  "body": {
    "role": "review"
    "@type": "CompositeWithRole",
    "item": [
      {"role": "remarks",
      "source": "http://example.org/body1"},
      {"role": "structured data",
      "source": "http://example.org/body2"}
    ]
  }
}
Example 60: Multiplicity with Role, SpecificResource NOT Required (Turtle)
<http://example.org/anno1> a oa:Annotation ;
    oa:hasTarget [oa:hasSource <http://example.com/target1>] ;
    oa:hasBody [
      oa:hasRole oa:review ;
      a oa:CompositeWithRole ;
      oa:item ([
          oa:hasRole oa:remarks ;
          oa:hasSource <http://example.org/body1>] ;
          [oa:hasRole oa:structured_data ;
          oa:hasSource <http://example.org/body2>]
        )
    ] .

A. References

A.1 Informative references

[annotation-model]
Robert Sanderson; Paolo Ciccarese. Web Annotation Data Model. 11 December 2014. W3C Working Draft. URL: http://www.w3.org/TR/annotation-model/
[annotation-roles]
Tim Cole; Robert Sanderson; Benjamin Young. Web Annotation Data Model: Roles. 23 August 2015. W3C Internal Document. URL: http://w3c.github.io/web-annotation/model/wd/roles.html
[annotation-WG-09Sep2015-minutes]
The Web Annotation Working Group. Teleconference [Minutes]. 09 September 2015. W3C Internal Document [Draft]. URL: http://www.w3.org/2015/09/09-annotation-minutes.html
[annotation-issue-67]
The Web Annotation Working Group. Dropping Type from ... what?. Opened 19 August 2015. W3C Internal Document [Draft]. URL: https://github.com/w3c/web-annotation/issues/67