  | 
  Open Services for Lifecycle Collaboration Core Specification Version 2.0  Appendix B: Representations and Examples 
 | 
This Version  
Latest Version   
Authors   
Contributors   
Table of Contents
This document provides details on how to form and serve RDF/XML, XML, Turtle, JSON and Atom representations of OSLC defined resources.
 Guidelines for application/rdf+xml 
Recall from the OSLC Core specification section on 
OSLC Defined Resource Representations that "OSLC services 
SHOULD provide and accept RDF/XML representations for each OSLC resource." An RDF/XML representation 
SHOULD be: 
-  Returned when these content types requested: 
application/rdf+xml
  -  Returned as content-type: 
application/rdf+xml
 
 
OSLC resources are defined using the RDF data model and so, the first guidance for both parsing and generating RDF/XML representations is to use an RDF/XML toolkit. Follow the RDF/XML specifications and your toolkit's documentation. There are such toolkits available for most popular languages.
 RDF/XML Examples 
See separate page 
OSLC Core Spec RDF XML Examples
 Guidelines for application/xml 
In this section we offer instructions for creating an XML representation for OSLC Defined Resources. The resultant XML representations are designed to validate as RDF/XML and therefore are often referred to as "constrained RDF/XML" or "abbreviated RDF/XML" representations, however the main intent of these instructions is to document a specific XML representation format for use in scenarios where a more unfettered RDF/XML representation or use of RDF/XML toolkits is not appropriate or preferred. OSLC domain specifications 
SHOULD refer to these instructions when requiring application/xml representations.
XML representations returned by OSLC Defined Resources 
SHOULD be: 
-  Returned when these content types requested: 
application/xml
  -  Returned as content-type: 
application/xml
 
 
 Steps to generate an XML representation 
This set of steps 
MAY be followed to form an XML representation of an OSLC Defined Resource. Other techniques 
MAY be used as long as the resulting XML is the same.
 
-  1.0 Open the XML root element 
<rdf:RDF> and include all required namespace declarations
  -  2.0 Open the XML element as a first child of the XML root element using the Resource's Prefixed Name  
-  2.1 Add to the XML element the 
rdf:about attribute set to the URI of the resource
 
 
  -  3.0 Represent the properties of the resource (using the property rules below)
  -  4.0 Close the XML element (using Resource's Prefixed Name)
  -  5.0 If this resource is a partial resource returned as a result of Resource Paging then:  
-  5.1 Open the XML element 
<oslc:ResponseInfo>
  -  5.2 Represent the properties of the 
oslc:ResponseInfo resource (using the property rules below)  
-  5.2.1 If this is not the last page, the 
oslc:nextPage property-value MUST point to the next page.
 
 
  -  5.3 Close the XML element 
</oslc:ResponseInfo>
 
 
  -  6.0 Close the XML root element 
</rdf:RDF>
 
 
These are the 
property rules referred to above. OSLC property values are represented as XML elements with QNames formed using the Property's QName namespace prefix and name.
 
-  1.0 For each property value of the resource  
-  1.1 Open XML element using QName of property
  -  1.2 If property value is a Literal value-type  
-  1.2.1 Inside the XML element add the value as a string with any required escaping
 
 
  -  1.3 If property value is value-type Resource with representation of Reference  
-  1.3.1 Add to the XML element the 
rdf:resource attribute set to URI
  -  1.3.2 If the resource reference is an Anchor (see OslcCoreSpecAppendixLinks Guidance) then add 
rdf:ID with an ID, unique to the resource and that will be referenced from a separate annotations element (see below).
 
 
  -  1.4 If property value is value type Local Resource with representation of Reference  
-  1.4.1 Add to the XML element the 
rdf:nodeID attribute set to local ID of the resource referred to
 
 
  -  1.5 If property value is value-type Resource with representation of Inline  
-  1.5.1 Open XML element using QName of the resource being represented inline
  -  1.5.2 Add to the XML element the 
rdf:about attribute set to URI of resource
  -  1.5.3 Inside the XML element represent property values of the linked resource
  -  1.5.4 Close the XML element
 
 
  -  1.6 If property value is value-type Local Resource with representation of Inline  
-  1.6.1 Open XML element using QName of the resource
  -  1.6.1 If this Local Resource is to be referred to elsewhere within the (containing) resource representation, then add to the XML element to 
rdf:nodeID set to the local ID you wish to assign to the resource.
  -  1.6.3 Inside the XML element represent property values of the resource
  -  1.6.4 Close the XML element
 
 
  -  1.7 Close XML element
 
 
 
 
If there are any Anchors (see step 1.3.2 above) then for each:
 
-  1.0 Open XML 
rdf:Description element with an rdf:about that refers to the anchor's ID.  
-  1.1 Inside the XML element represent each property value of the anchor, following the property rules above.
 
 
  -  2.0 Close the XML 
rdf:Description element
 
 
 XML Examples 
The examples on the 
OSLC Core Spec RDF XML Examples were generated using the rules above.
 Guidelines for JSON 
An OSLC Service 
MAY provide and understand JSON representations of OSLC Defined Resources and these representations 
SHOULD: 
-  Returned when these content types requested: 
application/json
  -  Returned as content-type: 
application/json
 
 
The first round of OSLC specifications defined a simple JSON format for representing OSLC resources and until there is a standard JSON representation for RDF data, we expect that OSLC domain specifications will continue to use this simple format.
The Core workgroup has some minor changes to the format to allow prefixes to be declared and offers guidance in the form of step-by-step instructions on how to generate it.
This set of steps 
MAY be followed to form a JSON representation of an OSLC Defined Resource. Other techniques 
MAY be used as long as the resulting JSON is the same.
 
-  1.0 Create a JSON object with the following fields:  
-  
rdf:about set to the URI of the resource.
  -  
rdf:type A resource can have multiple types, so this is a JSON Array of objects, each with an rdf:resource field that is a type of the resource.
  -  
prefixes set to a JSON object with one field per prefix used in the file, the field value should be the prefix base that corresponds to the prefix.
 
 
  -  2.0 Add to the JSON object fields to represent the property values of the resource (using the property rules below)
  -  3.0 If this resource is a partial resource returned as a result of Resource Paging then:  
-  3.1 Add to the JSON object a field 
oslc:responseInfo with value-type oslc:ResponseInfo  
-  3.1.1 Represent the property values of the response info resource (using the property rules below)
  -  3.1.2 If this is not the last page, the 
oslc:nextPage property-value MUST point to the next page.
 
 
 
 
 
 
These are the 
property rules referred to above. For each property:
 
-  1.0 For each property of a resource  
-  1.1 Add field to the resource's JSON object with name set to Prefixed Name of property  
-  1.1.1 If the property is specified as a single-valued property, then make field's value literal or JSON Object
  -  1.1.2 If the property is specified as a multi-valued property, then make field's value JSON Array
 
 
  -  1.2 If value-type is Literal  
-  1.2.1 If value-type is a Literal String, DateTime?  or XMLLiteral, set the field's value to a JSON string representation of the property value. 
  -  1.2.2 If value-type is a Literal numeric (Integer, Decimal, Double, Float), set the field's value to a JSON number. 
  -  1.2.3 If value-type is a Literal boolean, set the field's value to a JSON boolean. 
 
 
  -  1.3 Else if value-type is Resource with representation of Reference  
-  1.3.1 Set field's value to JSON object with field:  
-  
rdf:resource set to URI of resource
 
 
  -  1.3.2 If the resource reference is part of an Anchor (as described in Link Guidance) and has annotating property values, then include these properties within the JSON object.
 
 
  -  1.4 Else if value-type is Local Resource with representation of Reference  
-  1.4.1 Set field's value to JSON object with field:  
-  
rdf:nodeID set to local ID of resource
 
 
 
 
  -  1.5 Else if value-type is Resource with representation of Inline  
-  1.5.1 Set field's value to JSON object with fields:  
-  
rdf:about set to URI of resource whose values are being inlined
  -  Represent properties of inlined resource (using these same rules)
 
 
 
 
  -  1.6 Else if value-type is Local Resource with representation of Inline  
-  1.6.1 Set field's value to JSON object with fields:  
-  
rdf:nodeID set to local ID you wish to assign to this resource. Only needed when Local Resource needs to refer to this resource.
  -  Represent properties of inlined resource (using these same rules)
 
 
 
 
 
 
 
 
 JSON Examples 
See separate page 
OSLC Core Spec JSON Examples
 Turtle Representations 
An OSLC Service 
MAY provide and understand Turtle representations of OSLC Defined Resources. 
-  Returned when these content types requested: 
application/x-turtle
  -  Returned as content-type: 
application/x-turtle
 
 
As with RDF/XML we recommend using an RDF toolkit to parse and generate Turtle. Turtle is simple enough that we do not need to offer step-by-step guidance on how to generate it.
 Turtle Examples 
See separate page 
OSLC Core Spec Turtle Examples
 Atom Representations 
An OSLC Service 
MAY provide and accept Atom Syndication Format representations of OSLC Defined Resources (reference: Atom Format).
 Steps for forming an Atom format OSLC Defined Resource representation 
Note that there are special steps below for creating an OSLC Query Resource representation in Atom format.
When a client requests an Atom representation of an OSLC Defined Resource and specifies via HTTP Accept header content-type 
application/atom+xml or 
application/atom+xml;type=entry then an OSLC Service 
SHOULD respond with an Atom representation.
To represent an OSLC Defined Resource in Atom format we use an Atom 
<entry> element as document root, we map some OSLC properties to Atom elements and inside the Atom 
<content> element, we place an RDF/XML representation (as defined above) of the resource that we are representing. Atom representations 
MUST comply with the rules of Atom Syndication Format (reference: Atom format).
 
-  1.0 Open an Atom 
<entry> element  
-  1.1 Add Atom 
<id> element. Atom requires a unique ID here and in the form of a URN, the resource URI MAY be used here.
  -  1.2 Add Atom 
<title> element. Atom requires a non-empty title value. A dcterms:title value MAY be used here.
  -  1.3 Add Atom 
<updated> element. Atom requires an updated date-time value. In cases where an updated-time value is difficult or expensive to compute, OSLC domain specifications might wish to declare this value to be insignificant.
  -  1.4 Add Atom 
<content> element. Atom representations SHOULD provide a content element that contains an RDF/XML representation of the resource being represented.
  -  1.5 Add Atom 
<author> element. Atom requires an author element.
 
 
  -  2.0 Close Atom 
<entry> element
 
 
 Steps for forming an Atom format OSLC Query Resource representation 
When a client requests an Atom representation of an OSLC query resource and specifies via HTTP Accept header content-type 
application/atom+xml or then an OSLC Service 
SHOULD respond with an Atom feed representation as described below.
This representation guidance below represents each query result within the Atom feed as an Atom 
<entry> with RDF/XML data inlined inside the Atom entry's 
<content> element. Unless otherwise specified by the relevant OSLC domain specification, clients 
SHOULD expect that this inlined content will be full and unconstrained RDF/XML.
To represent an OSLC Query Resource in Atom format we use an Atom 
<feed> element as document root, add the required properties and then represent each member property value returned in the query response as an Atom 
<entry> element.
 
-  1.0 Open an Atom 
<feed> element  
-  1.1 To that element add as children the required Atom elements:  
-  
atom:id Must be a unique URN. The query resource URI may be used.
  -  
atom:title With same value as the query's oslc:ResponseInfo value for dcterms:title
  -  
atom:updated Set to time that query result was generated
  -  
atom:author This element is not meaningful but Atom requires it, so provide only a dummy value.
 
 
  -  1.2. To that element add optional Atom elements that you wish to provide:  
-  
atom:summary Set to oslc:ResponseInfo value for dcterms:description
  -  
atom:link With rel="self" set to same value as the query's resource URI
  -  
atom:link With rel="next" set to same value as the query's oslc:ResponseInfo value for oslc:nextPage
 
 
  -  1.3 For each member property value returned by the query:  
-  1.3.1 Open an Atom 
<entry> element
  -  1.3.2 Add to that element the required Atom elements:  
-  
atom:id Must be a unique URN. The member value's URI may be used.
  -  
atom:title If the member value has a dcterms:title value, then use that. Otherwise provide a non-empty string with only a dummy value.
  -  
atom:updated If the member value has a dcterms:modified value then use that. Otherwise use same value used at feed level.
  -  
atom:author If the member value provides dcterms:creator values, then each should be represented as an atom:author element.
 
 
  -  1.3.3 Add to the that element the 
atom:content element.  
-  Set the 
atom:content element's src attribute to the URI of the member value
  -  Set the 
atom:content element's type attribute to application/rdf+xml
  -  Inside the content element, include a complete RDF/XML representation of the member value as specified by the query, i.e. may be a subset of the resource's values as specified by the query syntax string. Set the 
rdf:about attribute of the root element to the URI of the query result.
 
 
  -  1.3.4 Close the Atom 
</entry> element
 
 
 
 
  -  2.0 Close the Atom 
</feed> element
 
 
 Atom Examples 
See separate page 
OSLC Core Spec Atom Examples