OSLC Core Specification:
RDF/XML Representation Examples
By: The
OSLC Core Workgroup
Overview
In this section we introduce a fictional service with two resource types and then provide examples of representations of those resources, a Resource Shape, a Query Resource Shape, a Service Provider and query results in RDF/XML format. These example representations follow the
OSLC Core Specification: Appendix B which uses a subset of RDF/XML. Note that clients should be prepared to any form of RDF/XML not just the one shown in these examples.
Also, note that we also provide
JSON Examples and
Turtle Examples that match the examples in this appendix.
Example Resources: fictional OSLC Blog Service
For the sole purpose of providing representation examples, we will define a fictional OSLC Blog Service with two resources: Blog Comment and Blog Entry. Each resource has a small set of required properties and each Comment is associated with an Entry. We will use these definitions in the RDF/XML examples in this appendix and in the JSON, Atom XML and Turtle examples that follow.
For example, we will define the blog entry and blog comment resources as follows:
- Name:
Entry
- URI:
http://open-services.net/ns/bogus/blogs#Entry
- Properties:
-
dcterms:title
(XML Literal, exactly-one) title of Podcast
-
dcterms:modified
(DateTime, exactly-one) - date/time that comment was created
-
dcterms:creator
(Local In-Line Resource of type foaf:Person
, exactly-one) - name of comment author
-
dcterms:content
(XML Literal, exactly-one) - content of the comment
- Name:
Comment
- URI:
http://open-services.net/ns/bogus/blogs#Comment
- Properties:
-
dcterms:modified
(DateTime, exactly-one) - date/time that comment was created
-
dcterms:creator
(Resource, In-Line, range foaf:Person
, exactly-one) - name of comment author
-
dcterms:content
(XML Literal, exactly-one) - content of the comment
-
blog:entry
(Resource, exactly-one of type blog:Entry
) - link to the Blog Entry
Next, the RDF/XML examples for the key resources in our fictional OSLC Blog Service.
Resources
Below is an example RDF/XML representation of a blog entry.
URL:
http://example.com/blogs/entry/1
Click
HERE to see RDF/XML validation results, triples and RDF graph.
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:oslc_blog="http://open-services.net/ns/bogus/blogs#">
<oslc_blog:Entry
rdf:about="http://example.com/blogs/entry/1">
<dcterms:title>I love trash</dcterms:title>
<dcterms:modified>2002-10-10T12:00:00-05:00</dcterms:modified>
<dcterms:content>
Anything dirty or dingy or dusty.
Anything ragged or rotten or rusty.
</dcterms:content>
<dcterms:creator>
<foaf:Person>
<foaf:name>Oscar T. Grouch</foaf:name>
</foaf:Person>
</dcterms:creator>
</oslc_blog:Entry>
</rdf:RDF>
Below is an example RDF/XML representation of a blog comment.
URL:
http://example.com/comments/1
Click
HERE to see RDF/XML validation results, triples and RDF graph.
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:oslc_blog="http://open-services.net/ns/bogus/blogs#">
<oslc_blog:Comment
rdf:about="http://example.com/comments/1">
<oslc_blog:entry rdf:resource="http://example.com/blogs/entry/1" />
<dcterms:content>LOL! Tell us how you really feel, Oscar.</dcterms:content>
<dcterms:modified>2002-10-10T12:12:23-05:00</dcterms:modified>
<dcterms:creator>
<foaf:Person>
<foaf:name>William B. Bird</foaf:name>
</foaf:Person>
</dcterms:creator>
</oslc_blog:Comment>
</rdf:RDF>
Service Provider Resource
Below is an RDF/XML representation of a Service Provider resource for the fictional Blog Service.
Click
HERE to see RDF/XML validation results, triples and RDF graph.
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:oslc="http://open-services.net/ns/core#">
<oslc:ServiceProvider
rdf:about="http://example.com/service-provider">
<dcterms:title>Blogging Service</dcterms:title>
<dcterms:description>Example OSLC Blog Service</dcterms:description>
<dcterms:publisher>
<oslc:Publisher>
<dcterms:title>OSLC Core Workgroup documentation department</dcterms:title>
<dcterms:identifier>com.example.oslc.blogservice</dcterms:identifier>
<oslc:icon rdf:resource="http://example.com/icons/blogservice.ico" />
</oslc:Publisher>
</dcterms:publisher>
<oslc:prefixDefinition>
< oslc:PrefixDefinition >
<oslc:prefix>rdf</oslc:prefix>
<oslc:prefixBase rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#" />
</oslc:PrefixDefinition >
</oslc:prefixDefinition >
< oslc:prefixDefinition >
< oslc:PrefixDefinition >
<oslc:prefix>dcterms</oslc:prefix>
<oslc:prefixBase rdf:resource="http://purl.org/dc/terms/" />
</oslc:PrefixDefinition >
</oslc:prefixDefinition >
< oslc:prefixDefinition >
< oslc:PrefixDefinition >
<oslc:prefix>oslc</oslc:prefix>
<oslc:prefixBase rdf:resource="http://open-services.net/ns/core#" />
</oslc:PrefixDefinition >
</oslc:prefixDefinition >
< oslc:prefixDefinition >
< oslc:PrefixDefinition >
<oslc:prefix>oslc_blog</oslc:prefix>
<oslc:prefixBase rdf:resource="http://open-services.net/ns/bogus/blogs#" />
</oslc:PrefixDefinition >
</oslc:prefixDefinition >
<oslc:service>
<oslc:Service>
<oslc:domain rdf:resource="http://example.com/xmlns/example-cm#" />
<oslc:creationFactory>
<oslc:CreationFactory>
<dcterms:title>Location for creation of Blog Entries</dcterms:title>
<oslc:label>Blog Entries</oslc:label>
<oslc:creation rdf:resource="http://example.com/creation/entries" />
<oslc:resourceShape rdf:resource="http://example.com/shapes/blogentry" />
<oslc:resourceType rdf:resource="http://open-services.net/ns/bogus/blogs#Entry" />
<oslc:usage rdf:resource="http://open-services.net/ns/core#default" />
</oslc:CreationFactory>
</oslc:creationFactory>
<oslc:creationFactory>
<oslc:CreationFactory>
<dcterms:title>Location for creation of Blog Comments</dcterms:title>
<oslc:label>Blog Comments</oslc:label>
<oslc:creation rdf:resource="http://example.com/creation/comments" />
<oslc:resourceShape rdf:resource="http://example.com/shapes/blogcomment" />
</oslc:CreationFactory>
</oslc:creationFactory>
<oslc:queryCapability>
<oslc:QueryCapability>
<dcterms:title>Blog Entry and Comment Query</dcterms:title>
<oslc:label>blogquery</oslc:label>
<oslc:queryBase rdf:resource="http://example.com/query" />
<oslc:resourceShape rdf:resource="http://example.com/shapes/blogquery" />
</oslc:QueryCapability>
</oslc:queryCapability>
</oslc:Service>
</oslc:service>
</oslc:ServiceProvider>
</rdf:RDF>
Shape Resources
Below is an example RDF/XML representation of a Resource Shape for the Blog Comment resource defined above.
URL:
http://example.com/shapes/commentshape
Click
HERE to see RDF/XML validation results, triples and RDF graph.
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:oslc="http://open-services.net/ns/core#" >
<oslc:ResourceShape
rdf:about="http://example.com/shapes/commentshape">
<dcterms:title>Blog Comment Shape</dcterms:title>
<oslc:name>Comment</oslc:name>
<oslc:describes rdf:resource="http://open-services.net/ns/bogus/blogs#Comment" />
<oslc:property>
<oslc:Property>
<oslc:name>modified</oslc:name>
<oslc:occurs rdf:resource="http://open-services.net/ns/core#Exactly-one" />
<oslc:propertyDefinition rdf:resource="http://purl.org/dc/terms/modified" />
<oslc:valueType rdf:resource="http://www.w3.org/2001/XMLSchema#dateTime" />
</oslc:Property>
</oslc:property>
<oslc:property>
<oslc:Property>
<oslc:name>creator</oslc:name>
<oslc:occurs rdf:resource="http://open-services.net/ns/core#Exactly-one" />
<oslc:propertyDefinition rdf:resource="http://purl.org/dc/terms/creator" />
<oslc:valueType rdf:resource="http://open-services.net/ns/core#LocalResource" />
<oslc:representation rdf:resource="http://open-services.net/ns/core#Either" />
<oslc:shape rdf:resource="http://example.com/blogs/personshape" />
</oslc:Property>
</oslc:property>
<oslc:property>
<oslc:Property>
<oslc:name>content</oslc:name>
<oslc:propertyDefinition rdf:resource="http://purl.org/dc/terms/content" />
<oslc:valueType rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral" />
<oslc:occurs rdf:resource="http://open-services.net/ns/core#Exactly-one" />
</oslc:Property>
</oslc:property>
<oslc:property>
<oslc:Property>
<oslc:name>entry</oslc:name>
<oslc:propertyDefinition rdf:resource="http://open-services.net/ns/bogus/blogs#Entry" />
<oslc:valueType rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral" />
<oslc:occurs rdf:resource="http://open-services.net/ns/core#Exactly-one" />
</oslc:Property>
</oslc:property>
</oslc:ResourceShape>
</rdf:RDF>
Specifying the shape of a query result
Assuming that the OSLC Core Query Syntax is being used, the query expression itself can determine the shape of the query result. Still there are reasons to provide more information to consumers so that they can understand what fields can be queried and understand the format of the data that is returned. There are several approaches that an OSLC specification can take. Here are three possibilities that we will explore further:
- Specify no resource or property types. Specify the fields that are available for query in the text of the specification, so that people know how to write query expressions, and return the default as property-values about resources using
rdf:Description
and rdfs:member
. The drawback to this approach is that an automated query build will not be able to discover how to create a query expression.
- Specify a resource type but no property type. In the Service resource in the definition of the Query Capability, add an
oslc:resourceType
property-value to specify the resource type to be used for the query result. This will enable people and query builders, to a limited extent, to discover the properties that can be queried. You can then return the query results using the defined resource type and rdfs:member
to hold each query result.
- Specify both via Query Resource Shape. In the Service resource in the definition of the Query Capability, add an
oslc:resourceShape
property-value to specify a complete Resource Shape that defines the shape of the query. The shape should specify both a resource type to be used for the results, and a member property to be used to represent individual query results. This will enable people and query builders to discover query-able fields and the shape specifies the form that will be returned.
Specify no resource or property types
This is option #1 above. Instead of specifying a full Resource Shape, we do not specify result types and simply return property-values about the query result URIs in a standard RDF/XML form. Because there is no resource-type, we can use an RDF-standard
rdf:Description
to contain the query results and we can use RDFS standard
rdfs:member
for each result.
Example query response based on resource type alone
Click
HERE to see RDF/XML validation results, triples and RDF graph.
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:oslc="http://open-services.net/ns/core#"
xmlns:oslc_blog="http://open-services.net/ns/bogus/blogs#">
<oslc:ResponseInfo
rdf:about="http://example.com/query?oslc.where=rdf:type=oslc_blog:Comment&oslc.select=dcterms:title">
<dcterms:title>Blog Service Query Results</dcterms:title>
</oslc:ResponseInfo>
<rdf:Description rdf:about="http://example.com/query">
<rdfs:member>
<oslc_blog:Comment rdf:about="http://example.com/blogs/comment/5">
<!-- Comment property values, etc. -->
<dcterms:title>Comment #5</dcterms:title>
</oslc_blog:Comment>
</rdfs:member>
<rdfs:member>
<oslc_blog:Comment rdf:about="http://example.com/blogs/comment/4">
<!-- Comment property values, etc. -->
<dcterms:title>Comment #4</dcterms:title>
</oslc_blog:Comment>
</rdfs:member>
<rdfs:member>
<oslc_blog:Comment rdf:about="http://example.com/blogs/comment/2">
<!-- Comment property values, etc. -->
<dcterms:title>Comment #2</dcterms:title>
</oslc_blog:Comment>
</rdfs:member>
<rdfs:member>
<oslc_blog:Comment rdf:about="http://example.com/blogs/comment/1">
<!-- Comment property values, etc. -->
<dcterms:title>Comment #1</dcterms:title>
</oslc_blog:Comment>
</rdfs:member>
<rdfs:member>
<oslc_blog:Comment rdf:about="http://example.com/blogs/comment/3">
<!-- Comment property values, etc. -->
<dcterms:title>Comment #3</dcterms:title>
</oslc_blog:Comment>
</rdfs:member>
<!-- etc. etc. -->
</rdf:Description>
</rdf:RDF>
Specify a query resource type
This is option #2 above. Instead of specifying a full Resource Shape, here we simply specify the result resource type of
http://open-services.net/ns/bogus/blogs#BlogQuery
and use RFDS standard property
rdfs:member
as the member property.
Example query response based on resource type alone
Click
HERE to see RDF/XML validation results, triples and RDF graph.
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:oslc="http://open-services.net/ns/core#"
xmlns:oslc_blog="http://open-services.net/ns/bogus/blogs#">
<oslc:ResponseInfo
rdf:about="http://example.com/query?oslc.where=rdf:type=oslc_blog:Comment&oslc.select=dcterms:title">
<dcterms:title>Blog Service Query Results</dcterms:title>
</oslc:ResponseInfo>
<oslc_blog:BlogQuery rdf:about="http://example.com/query">
<rdfs:member>
<oslc_blog:Comment rdf:about="http://example.com/blogs/comment/5">
<!-- Comment property values, etc. -->
<dcterms:title>Comment #5</dcterms:title>
</oslc_blog:Comment>
</rdfs:member>
<rdfs:member>
<oslc_blog:Comment rdf:about="http://example.com/blogs/comment/4">
<!-- Comment property values, etc. -->
<dcterms:title>Comment #4</dcterms:title>
</oslc_blog:Comment>
</rdfs:member>
<rdfs:member>
<oslc_blog:Comment rdf:about="http://example.com/blogs/comment/2">
<!-- Comment property values, etc. -->
<dcterms:title>Comment #2</dcterms:title>
</oslc_blog:Comment>
</rdfs:member>
<rdfs:member>
<oslc_blog:Comment rdf:about="http://example.com/blogs/comment/1">
<!-- Comment property values, etc. -->
<dcterms:title>Comment #1</dcterms:title>
</oslc_blog:Comment>
</rdfs:member>
<rdfs:member>
<oslc_blog:Comment rdf:about="http://example.com/blogs/comment/3">
<!-- Comment property values, etc. -->
<dcterms:title>Comment #3</dcterms:title>
</oslc_blog:Comment>
</rdfs:member>
<!-- etc. etc. -->
</oslc_blog:BlogQuery>
</rdf:RDF>
Specify a query resource shape
This is option #3 above. Here we specify a Resource Shape that specifies a Query Resource with resource type
http://open-services.net/ns/bogus/blogs#BlogQuery
and a member property of type
http://open-services.net/ns/bogus/blogs#comment
via a full Resource Shape:
Click
HERE to see RDF/XML validation results, triples and RDF graph.
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:oslc="http://open-services.net/ns/core#">
<oslc:ResourceShape
rdf:about="http://example.com/shapes/blogquery">
<dcterms:title>Blog Comment Query Shape</dcterms:title>
<rdf:type rdf:resource="http://open-services.net/ns/core#ResourceShape" />
<oslc:name>BlogQuery</oslc:name>
<oslc:describes rdf:resource="http://open-services.net/ns/bogus/blogs#BlogQuery" />
<oslc:property>
<oslc:Property>
<oslc:name>comment</oslc:name>
<oslc:occurs rdf:resource="http://open-services.net/ns/core#Zero-or-many" />
<oslc:valueShape rdf:resource="http://example.com/blogs/commentshape" />
<oslc:propertyDefinition rdf:resource="http://open-services.net/ns/bogus/blogs#comment" />
<oslc:range rdf:resource="http://open-services.net/ns/bogus/blogs#Comment" />
<oslc:isMemberProperty>true</oslc:isMemberProperty>
</oslc:Property>
</oslc:property>
</oslc:ResourceShape>
</rdf:RDF>
Example query response based on shape
Below is an example query resource, one which would be returned by the below query on the query capability defined above.
Click
HERE to see RDF/XML validation results, triples and RDF graph.
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:oslc="http://open-services.net/ns/core#"
xmlns:oslc_blog="http://open-services.net/ns/bogus/blogs#">
<oslc:ResponseInfo rdf:about="http://example.com/query?oslc.select [...] entry/1>">
<dcterms:title>Blog Service Query Results for term [remote]</dcterms:title>
</oslc:ResponseInfo>
<oslc_blog:BlogQuery rdf:about="http://example.com/query">
<oslc_blog:comment>
<oslc_blog:Comment rdf:about="http://example.com/blogs/comment/5">
<!-- Comment propery values, etc. -->
<dcterms:title>Comment #5</dcterms:title>
</oslc_blog:Comment>
</oslc_blog:comment>
<oslc_blog:comment>
<oslc_blog:Comment rdf:about="http://example.com/blogs/comment/4">
<!-- Comment propery values, etc. -->
<dcterms:title>Comment #4</dcterms:title>
</oslc_blog:Comment>
</oslc_blog:comment>
<oslc_blog:comment>
<oslc_blog:Comment rdf:about="http://example.com/blogs/comment/2">
<!-- Comment propery values, etc. -->
<dcterms:title>Comment #2</dcterms:title>
</oslc_blog:Comment>
</oslc_blog:comment>
<oslc_blog:comment>
<oslc_blog:Comment rdf:about="http://example.com/blogs/comment/1">
<!-- Comment propery values, etc. -->
<dcterms:title>Comment #1</dcterms:title>
</oslc_blog:Comment>
</oslc_blog:comment>
<oslc_blog:comment>
<oslc_blog:Comment rdf:about="http://example.com/blogs/comment/3">
<!-- Comment propery values, etc. -->
<dcterms:title>Comment #3</dcterms:title>
</oslc_blog:Comment>
</oslc_blog:comment>
<!-- etc. etc. -->
</oslc_blog:BlogQuery>
</rdf:RDF>
Resource Shapes for Core resource definitions
This section provides some common resource definitions utilizing the OSLC Core Shape Resource definition. Implementations may use these shapes to as a basis for their work, providing their own property additions and additional constraints on OSLC defined properties.
foaf:Person
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:foaf="http://http://xmlns.com/foaf/0.1/"
xmlns:oslc="http://open-services.net/ns/core#" >
<oslc:ResourceShape
rdf:about="http://example.com/oslc/shapes/Person">
<dcterms:title>FOAF Person Shape</dcterms:title>
<rdf:type rdf:resource="http://open-services.net/ns/core#ResourceShape" />
<oslc:name>Person</oslc:name>
<oslc:describes rdf:resource="http://http://xmlns.com/foaf/0.1/Person" />
<oslc:property>
<oslc:Property>
<oslc:name>name</oslc:name>
<oslc:propertyDefinition rdf:resource="http://http://xmlns.com/foaf/0.1/name" />
<oslc:valueType rdf:resource="http://www.w3.org/2001/XMLSchema#string" />
<oslc:occurs rdf:resource="http://open-services.net/ns/core#Zero-or-one" />
</oslc:Property>
</oslc:property>
<oslc:property>
<oslc:Property>
<oslc:name>givenName</oslc:name>
<oslc:propertyDefinition rdf:resource="http://http://xmlns.com/foaf/0.1/givenName" />
<oslc:valueType rdf:resource="http://www.w3.org/2001/XMLSchema#string" />
<oslc:occurs rdf:resource="http://open-services.net/ns/core#Zero-or-one" />
</oslc:Property>
</oslc:property>
<oslc:property>
<oslc:Property>
<oslc:name>familyName</oslc:name>
<oslc:propertyDefinition rdf:resource="http://http://xmlns.com/foaf/0.1/familyName" />
<oslc:valueType rdf:resource="http://www.w3.org/2001/XMLSchema#string" />
<oslc:occurs rdf:resource="http://open-services.net/ns/core#Zero-or-one" />
</oslc:Property>
</oslc:property>
</oslc:ResourceShape>
</rdf:RDF>
oslc:Discussion
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:foaf="http://http://xmlns.com/foaf/0.1/"
xmlns:oslc="http://open-services.net/ns/core#" >
<oslc:ResourceShape
rdf:about="http://example.com/oslc/shapes/Discussion">
<dcterms:title>OSLC Core Discussion Shape</dcterms:title>
<rdf:type rdf:resource="http://open-services.net/ns/core#ResourceShape" />
<oslc:name>Discussion</oslc:name>
<oslc:describes rdf:resource="http://open-services.net/ns/core#Discussion" />
<oslc:property>
<oslc:Property>
<oslc:name>discussionAbout</oslc:name>
<oslc:propertyDefinition rdf:resource="http://open-services.net/ns/core#discussionAbout" />
<oslc:valueType rdf:resource="http://open-services.net/ns/core#Resource" />
<oslc:occurs rdf:resource="http://open-services.net/ns/core#Exactly-one" />
</oslc:Property>
</oslc:property>
<oslc:property>
<oslc:Property>
<oslc:name>comment</oslc:name>
<oslc:propertyDefinition rdf:resource="http://open-services.net/ns/core#comment" />
<oslc:valueType rdf:resource="http://open-services.net/ns/core#AnyResource" />
<oslc:range rdf:resource="http://open-services.net/ns/core#Comment" />
<oslc:representation rdf:resource="http://open-services.net/ns/core#Either" />
<oslc:occurs rdf:resource="http://open-services.net/ns/core#Zero-or-many" />
</oslc:Property>
</oslc:property>
</oslc:ResourceShape>
</rdf:RDF>
oslc:Comment
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:foaf="http://http://xmlns.com/foaf/0.1/"
xmlns:oslc="http://open-services.net/ns/core#" >
<oslc:ResourceShape
rdf:about="http://example.com/oslc/shapes/Comment">
<dcterms:title>OSLC Core Comment Shape</dcterms:title>
<rdf:type rdf:resource="http://open-services.net/ns/core#ResourceShape" />
<oslc:name>Comment</oslc:name>
<oslc:describes rdf:resource="http://open-services.net/ns/core#Comment" />
<oslc:property>
<oslc:Property>
<oslc:name>identifier</oslc:name>
<oslc:propertyDefinition rdf:resource="http://purl.org/dc/terms/identifier" />
<oslc:valueType rdf:resource="http://www.w3.org/2001/XMLSchema#string" />
<oslc:occurs rdf:resource="http://open-services.net/ns/core#Exactly-one" />
</oslc:Property>
</oslc:property>
<oslc:property>
<oslc:Property>
<oslc:name>creator</oslc:name>
<oslc:propertyDefinition rdf:resource="http://purl.org/dc/terms/creator" />
<oslc:valueType rdf:resource="http://open-services.net/ns/core#AnyResource" />
<oslc:range rdf:resource="http://http://xmlns.com/foaf/0.1/Person" />
<oslc:representation rdf:resource="http://open-services.net/ns/core#Either" />
<oslc:valueShape rdf:resource="http://example.com/oslc/shapes/Person" />
<oslc:occurs rdf:resource="http://open-services.net/ns/core#Exactly-one" />
</oslc:Property>
</oslc:property>
<oslc:property>
<oslc:Property>
<oslc:name>title</oslc:name>
<oslc:propertyDefinition rdf:resource="http://purl.org/dc/terms/title" />
<oslc:valueType
rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral" />
<oslc:occurs rdf:resource="http://open-services.net/ns/core#Zero-or-one" />
</oslc:Property>
</oslc:property>
<oslc:property>
<oslc:Property>
<oslc:name>created</oslc:name>
<oslc:propertyDefinition rdf:resource="http://purl.org/dc/terms/created" />
<oslc:valueType rdf:resource="http://www.w3.org/2001/XMLSchema#dateTime" />
<oslc:occurs rdf:resource="http://open-services.net/ns/core#Exactly-one" />
</oslc:Property>
</oslc:property>
<oslc:property>
<oslc:Property>
<oslc:name>description</oslc:name>
<oslc:propertyDefinition rdf:resource="http://purl.org/dc/terms/description" />
<oslc:valueType
rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral" />
<oslc:occurs rdf:resource="http://open-services.net/ns/core#Exactly-one" />
</oslc:Property>
</oslc:property>
<oslc:property>
<oslc:Property>
<oslc:name>partOfDiscussion</oslc:name>
<oslc:propertyDefinition
rdf:resource="http://open-services.net/ns/core#partOfDiscussion" />
<oslc:valueType rdf:resource="http://open-services.net/ns/core#Resource" />
<oslc:range rdf:resource="http://open-services.net/ns/core#Discussion" />
<oslc:occurs rdf:resource="http://open-services.net/ns/core#Exactly-one" />
<oslc:representation rdf:resource="http://open-services.net/ns/core#Reference" />
</oslc:Property>
</oslc:property>
<oslc:property>
<oslc:Property>
<oslc:name>inReplyTo</oslc:name>
<oslc:propertyDefinition
rdf:resource="http://open-services.net/ns/core#inReplyTo" />
<oslc:valueType rdf:resource="http://open-services.net/ns/core#Reference" />
<oslc:range rdf:resource="http://open-services.net/ns/core#Comment" />
<oslc:representation rdf:resource="http://open-services.net/ns/core#Reference" />
<oslc:occurs rdf:resource="http://open-services.net/ns/core#Zero-or-one" />
</oslc:Property>
</oslc:property>
</oslc:ResourceShape>
</rdf:RDF>