## Notices

Copyright © OASIS Open 2021. All Rights Reserved.

All capitalized terms in the following text have the meanings assigned to them in the OASIS Intellectual Property Rights Policy (the "OASIS IPR Policy"). The full Policy may be found at the OASIS website.

This specification is published under the Attribution 4.0 International (CC BY 4.0). Portions of this specification are also provided under the Apache License 2.0.

All contributions made to this project have been made under the OASIS Contributor License Agreement (CLA).

For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Open Projects IPR Statements page.

This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published, and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this section are included on all such copies and derivative works. However, this document itself may not be modified in any way, including by removing the copyright notice or references to OASIS, except as needed for the purpose of developing any document or deliverable produced by an OASIS Open Project or OASIS Technical Committee (in which case the rules applicable to copyrights, as set forth in the OASIS IPR Policy, must be followed) or as required to translate it into languages other than English.

The limited permissions granted above are perpetual and will not be revoked by OASIS or its successors or assigns.

This document and the information contained herein is provided on an "AS IS" basis and OASIS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY OWNERSHIP RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

OASIS requests that any OASIS Party or any other party that believes it has patent claims that would necessarily be infringed by implementations of this OASIS Project Specification or OASIS Standard, to notify the OASIS TC Administrator and provide an indication of its willingness to grant patent licenses to such patent claims in a manner consistent with the IPR Mode of the OASIS Technical Committee that produced this specification.

OASIS invites any party to contact the OASIS TC Administrator if it is aware of a claim of ownership of any patent claims that would necessarily be infringed by implementations of this specification by a patent holder that is not willing to provide a license to such patent claims in a manner consistent with the IPR Mode of the OASIS Open Project that produced this specification. OASIS may include such claims on its website, but disclaims any obligation to do so.

OASIS takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Information on OASIS' procedures with respect to rights in any document or deliverable produced by an OASIS Technical Committee can be found on the OASIS website. Copies of claims of rights made available for publication and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this OASIS Open Project Specification or OASIS Standard, can be obtained from the OASIS TC Administrator. OASIS makes no representation that any information or list of intellectual property rights will at any time be complete, or that any claims in such list are, in fact, Essential Claims.

The name "OASIS" is a trademark of OASIS, the owner and developer of this specification, and should be used only to refer to the organization and its official outputs. OASIS welcomes reference to, and implementation and use of, specifications, while reserving the right to enforce its marks against misleading uses. Please see https://www.oasis-open.org/policies-guidelines/trademark for above guidance.

## Table of Contents

## 1. Introduction

This section is non-normative.

RDF vocabularies define the terms and resources for a domain of interest, life-cycle management in the case of OSLC Core. These vocabularies are often specified in an open manner, without providing information such as property domain and range assertions, cardinalities, etc. This helps keep the vocabulary applicable for a wide range of uses and furthering integration with other vocabularies.

However, it is often desirable to closed down a vocabulary with specific constraints to facilitate using the vocabulary for a specific purpose. This document specifies the constraints for using the OSLC Core vocabulary in OSLC. Different sets of constraints MAY be applied to a vocabulary in order to tailor its use, without overly constraining the vocabulary for other usages. [CC-1]

These constraints apply to the core vocabulary defined in OSLC Core Version 3.0. Part 7: Vocabulary.

### 1.1 Terminology

Terminology uses and extends the terminology and capabilities of OSLC Core Overview, W3C Linked Data Platform [LDP], W3C's Architecture of the World Wide Web [WEBARCH], Hyper-text Transfer Protocol [HTTP11].

No new terms are defined in this part.

### 1.2 References

#### 1.2.1 Normative references

[DC-TERMS]
  DCMI Usage Board. Dublin Core Metadata Terms, version 1.1. DCMI, 11 October 2010. DCMI Recommendation. URL: http://dublincore.org/documents/2010/10/11/dcmi-terms/
[FOAF]
  Dan Brickley; Libby Miller. FOAF Vocabulary Specification 0.99 (Paddington Edition). FOAF project, 14 January 2014. URL: http://xmlns.com/foaf/spec
[HTTP11]
  R. Fielding, Ed.; J. Reschke, Ed.. Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing. IETF, June 2014. Proposed Standard. URL: https://httpwg.org/specs/rfc7230.html
[LDP]
  Steve Speicher; John Arwe; Ashok Malhotra. Linked Data Platform 1.0. W3C, 26 February 2015. W3C Recommendation. URL: https://www.w3.org/TR/ldp/
[OSLCCore2]
  S. Speicher; D. Johnson. OSLC Core 2.0. http://open-services.net. Finalized. URL: http://open-services.net/bin/view/Main/OslcCoreSpecification
[RFC2119]
  S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. IETF, March 1997. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC8174]
  B. Leiba. Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. IETF, May 2017. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc8174
[rdf-schema]
  Dan Brickley; Ramanathan Guha. RDF Schema 1.1. W3C, 25 February 2014. W3C Recommendation. URL: https://www.w3.org/TR/rdf-schema/
[rdf11-concepts]
  Richard Cyganiak; David Wood; Markus Lanthaler. RDF 1.1 Concepts and Abstract Syntax. W3C, 25 February 2014. W3C Recommendation. URL: https://www.w3.org/TR/rdf11-concepts/

#### 1.2.2 Informative references

[CSS21]
  Bert Bos; Tantek Çelik; Ian Hickson; Håkon Wium Lie. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. W3C, 7 June 2011. W3C Recommendation. URL: https://www.w3.org/TR/CSS21/
[SHACL]
  Holger Knublauch; Arthur Ryman. Shapes Constraint Language (SHACL). http://www.w3.org/. Draft. URL: https://w3c.github.io/data-shapes/shacl/
[WEBARCH]
  Ian Jacobs; Norman Walsh. Architecture of the World Wide Web, Volume One. W3C, 15 December 2004. W3C Recommendation. URL: https://www.w3.org/TR/webarch/
[skos-reference]
  Alistair Miles; Sean Bechhofer. SKOS Simple Knowledge Organization System Reference. W3C, 18 August 2009. W3C Recommendation. URL: https://www.w3.org/TR/skos-reference/

### 1.3 Typographical Conventions and Use of RFC Terms

As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this specification are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

## 2. Common Properties

Unlike the rest of the Core specification, these properties change and grow as new common properties are added. The properties that we list here are available for use in OSLC domain specifications when defining OSLC resources, but this does not mean that they are required to be in OSLC resources. OSLC domain specifications decide which properties are allowed and required for resources needed to realize their use cases. The OSLC common properties include properties defined in other standard vocabularies including:

- Friend of a Friend (FOAF)
- Dublin Core (dcterms)
- RDF Schema (rdfs)

### 2.1 Properties on Any Resource

- Describes: `Common Properties`
- Summary: Defines common properties that are be applicable to any OSLC resource. OSLC domains SHOULD use these properties where applicable rather than defining their own properties [CC-2]. The cardinality, representations, ranges, and other columns of the following table indicate typical usage. However, a domain MAY apply its own constraints for particular resource shapes [CC-3].

Common Properties Properties

Prefixed Name | Occurs | Read-only | Value-type | Representation | Range | Description
--- | --- | --- | --- | --- | --- | ---
`dcterms:contributor` | Zero-or-many | unspecified | AnyResource | Either | `oslc:Any`, `foaf:Person` | Contributor or contributors to the resource. It is likely that the target resource will be a foaf:Person but that is not necessarily the case.
`dcterms:created` | Zero-or-one | unspecified | dateTime | N/A | Unspecified | Timestamp of resource creation.
`dcterms:creator` | Zero-or-many | unspecified | AnyResource | Either | `oslc:Any`, `foaf:Person` | Creator or creators of the resource. It is likely that the target resource will be a foaf:Person but that is not necessarily the case.
`dcterms:description` | Zero-or-many | unspecified | XMLLiteral | N/A | Unspecified | Descriptive text about resource represented as rich text in XHTML content.
`dcterms:identifier` | Zero-or-many | unspecified | string | N/A | Unspecified | A unique identifier for a resource. Typically read-only and assigned by the service provider when a resource is created. Not typically intended for end-user display.
`dcterms:modified` | Zero-or-many | unspecified | dateTime | N/A | Unspecified | Timestamp of latest resource modification.
`dcterms:references` | Zero-or-many | unspecified | AnyResource | Either | Unspecified | A related resource that is referenced, cited, or otherwise pointed to by the described resource.
`dcterms:relation` | Zero-or-many | unspecified | AnyResource | Either | Unspecified | Relation which identifies a related resource.
`dcterms:subject` | Zero-or-many | unspecified | string | N/A | Unspecified | Tag or keyword for a resource. Each occurrence of a dcterms:subject property denotes an additional tag for the resource.
`dcterms:title` | Zero-or-many | unspecified | XMLLiteral | N/A | Unspecified | Title of the resource represented as rich text in XHTML content.
`oslc:archived` | Zero-or-one | unspecified | boolean | N/A | Unspecified | Indicates whether the subject has been marked as archived, no longer an actively updating resource.
`oslc:discussedBy` | Zero-or-one | unspecified | Resource | Either | `oslc:Discussion` | A series of notes and comments about this resource.
`oslc:error` | Zero-or-many | unspecified | AnyResource | Either | Unspecified | A series of errors associated with this resource.
`oslc:instanceShape` | Zero-or-many | unspecified | Resource | Reference | `oslc:ResourceShape` | The URI of a Resource Shape that describes the possible properties, occurrence, value types, allowed values and labels. This shape information is useful in displaying the subject resource as well as guiding clients in performing modifications. Instance shapes may be specific to the authenticated user associated with the request that retrieved the resource, the current state of the resource and other factors and thus should not be cached.
`oslc:modifiedBy` | Zero-or-many | unspecified | Resource | Either | `oslc:Any`, `foaf:Person` | The URI of a resource describing the entity that most recently modified the subject resource. The link target is usually a foaf:Person or foaf:Agent, but could be any type. This is modeled after dcterms:creator, but Dublin Core currently has no equivalent property.
`oslc:queryable` | Zero-or-one | unspecified | boolean | N/A | Unspecified | Indicates whether a property is queryable (can appear in oslc.where and olsc.select clause) or not. Defaults to true if unspecified.
`oslc:serviceProvider` | Zero-or-many | unspecified | Resource | Reference | `oslc:ServiceProvider` | A link to the resource's OSLC Service Provider. There may be cases when the subject resource is available from a service provider that implements multiple domain specifications, which could result in multiple values for this property.
`oslc:shortId` | Zero-or-many | unspecified | string | N/A | Unspecified | A short, human-readable, plain text value. This value should be unique in some context that is apparent to human users of a service.
`oslc:shortTitle` | Zero-or-many | unspecified | XMLLiteral | N/A | Unspecified | Shorter form of dcterms:title for the resource represented as rich text in XHTML content.
`rdf:type` | Zero-or-many | unspecified | Resource | Reference | `rdfs:Class` | The resource type URIs.
`rdfs:member` | Zero-or-many | unspecified | Resource | Either | Unspecified | OSLC domains might define a number of member or contains relationships between resources. The rdfs:member property is suitable for use when only one such relationship needs to be defined, or when no additional semantics need to be implied by the property name.

### 2.2 Person Properties

- Describes: `http://xmlns.com/foaf/0.1/Person`
- Summary: Person is a resource defined by FOAF that is used as the value for a dcterms:creator or dcterms:contributor property. This shape specifies the recommended minimal FOAF Person properties that should be provided for OSLC.

Person Properties

Prefixed Name | Occurs | Read-only | Value-type | Representation | Range | Description
--- | --- | --- | --- | --- | --- | ---
`foaf:familyName` | Zero-or-many | unspecified | string | N/A | Unspecified | Family name of person expressed as simple text string.
`foaf:givenName` | Zero-or-many | unspecified | string | N/A | Unspecified | Given name of person expressed as simple text string.
`foaf:mbox` | Zero-or-many | unspecified | string | N/A | Unspecified | A personal mailbox for this person, typically identified using the mailto: URI scheme (see RFC 2368).
`foaf:name` | Zero-or-many | unspecified | string | N/A | Unspecified | The full name of a person expressed as simple text string.
`foaf:nick` | Zero-or-many | unspecified | string | N/A | Unspecified | A short informal nickname or login identifer expressed as simple text string.

### 2.3 Implementation Conformance

Changes to the OSLC Core Vocabulary MUST be approved by the OASIS OSLC Open Project. [CC-4] The OSLC Core Vocabulary is assigned the namespace URI of the `http://open-services.net/ns/core#`.

Domain TCs and other extensions MUST contribute their vocabulary terms in a namespace which is assigned to them as an authority. [CC-5]

OSLC Core, domain and other extensions SHOULD reuse existing vocabulary terms from stable vocabularies such as [DC-TERMS], RDF [rdf11-concepts], RDF Schema [rdf-schema], [FOAF], [skos-reference] and OSLC. [CC-6] New vocabulary terms SHOULD only be created when there is no clear existing choice available. [CC-7] See the [LDP] similar clause on reuse.

## 3. Discussion

### 3.1 Shape: Discussion

It is common to collect a series of comments on a lifecycle resource, often referred to as a discussion. For example: tasks, bug reports, requirements, assets and so on, are often collected across various types of resources such as project. A project might reflect the planning of work to deliver a product that realizes the requirements as validated through test cases and bug reports. Discussions allow users to collaborate with each other for more efficient and effective delivery. This Discussion resource definition provides a minimal shape describing the needed properties.

- Describes: `http://open-services.net/ns/core#Discussion`
- Summary: OSLC Core Discussion Shape

Discussion Properties

Prefixed Name | Occurs | Read-only | Value-type | Representation | Range | Description
--- | --- | --- | --- | --- | --- | ---
`oslc:comment` | Zero-or-many | false | AnyResource | Either | `oslc:Comment` | Comment about resource.
`oslc:discussionAbout` | Exactly-one | false | Resource | Reference | Unspecified | Reference to associated resource.

### 3.2 Shape: Comment

Used in conjunction with Shape: Discussion to provide a minimal resource definition for a collection of comments.

- Describes: `http://open-services.net/ns/core#Comment`
- Summary: OSLC Core Comment Shape

Comment Properties

Prefixed Name | Occurs | Read-only | Value-type | Representation | Range | Description
--- | --- | --- | --- | --- | --- | ---
`dcterms:created` | Exactly-one | unspecified | dateTime | N/A | Unspecified | When the comment resource was created.
`dcterms:creator` | Exactly-one | unspecified | AnyResource | Either | `foaf:Person` | The person who created the comment.
`dcterms:description` | Exactly-one | unspecified | XMLLiteral | N/A | Unspecified | Details or body of the comment; SHOULD include only content that is valid and suitable inside an XHTML `<div>` element [CC-8].
`dcterms:identifier` | Exactly-one | unspecified | string | N/A | Unspecified | A service defined identifier.
`dcterms:title` | Zero-or-one | unspecified | XMLLiteral | N/A | Unspecified | A brief title for the comment; SHOULD include only content that is valid and suitable inside an XHTML `<span>` element [CC-9].
`oslc:inReplyTo` | Zero-or-one | unspecified | Resource | Reference | `oslc:Comment` | Reference to the comment to which this comment replies.

## 4. Errors

### 4.1 Implementation Conformance

When an OSLC Server incurs an error, it is RECOMMENDED that useful information be provided to clients in the body of the HTTP response. [CC-10]

OSLC Servers SHOULD use the Error resource defined below as the basis for forming error responses. [CC-11]

OSLC Servers SHOULD return an Error resource using the same representation format requested by the client via the HTTP `Accept` request header. [HTTP11] [CC-12]

OSLC Clients SHOULD treat the `oslc:statusCode` as a String that starts with digits, but MAY contain non-digit text. [CC-13]

### 4.2 Shape: Error

Used when servers need a consistent shape to communicate error messages.

- Describes: `http://open-services.net/ns/core#Error`
- Summary: OSLC Core Error Shape

Error Properties

Prefixed Name | Occurs | Read-only | Value-type | Representation | Range | Description
--- | --- | --- | --- | --- | --- | ---
`dcterms:created` | Zero-or-one | unspecified | dateTime | N/A | Unspecified | Optional indication of when the error was detected.
`dcterms:identifier` | Zero-or-many | unspecified | string | N/A | Unspecified | A unique human-readable string identifier for this resource, such as an error number or code.
`dcterms:references` | Zero-or-many | unspecified | AnyResource | Either | Unspecified | A reference to any resources that are the subject of this error.
`oslc:cause` | Zero-or-many | true | AnyResource | Either | `oslc:Error` | An error that was the cause of this error.
`oslc:extendedError` | Zero-or-one | true | AnyResource | Either | `oslc:ExtendedError` | Extended error information.
`oslc:message` | Exactly-one | true | string | N/A | Unspecified | An informative message describing the error that occurred.
`oslc:statusCode` | Exactly-one | true | string | N/A | Unspecified | The HTTP status code reported with the error.

### 4.3 Shape: ExtendedError

Additional details about an error the server had when processing the request.

- Describes: `http://open-services.net/ns/core#ExtendedError`
- Summary: OSLC Core ExtendedError Shape

ExtendedError Properties

Prefixed Name | Occurs | Read-only | Value-type | Representation | Range | Description
--- | --- | --- | --- | --- | --- | ---
`oslc:hintHeight` | Zero-or-one | true | string | N/A | Unspecified | Values MUST be expressed in relative length units as defined in the W3C Cascading Style Sheets Specification (CSS 2.1) Em and ex units are interpreted relative to the default system font (at 100% size) [CC-14].
`oslc:hintWidth` | Zero-or-one | true | string | N/A | Unspecified | Values MUST be expressed in relative length units as defined in the W3C Cascading Style Sheets Specification (CSS 2.1) Em and ex units are interpreted relative to the default system font (at 100% size) [CC-15].
`oslc:moreInfo` | Zero-or-one | true | Resource | Reference | Unspecified | A resource giving more information on the error SHOULD be of an HTML content-type [CC-16].
`oslc:rel` | Zero-or-one | true | string | N/A | Unspecified | If present and set to 'alternate' then indicates that work-around is provided, behavior for other values is undefined.

### 4.4 Shape: ResponseInfo

Resource representations returned via [OSLCCore2] Resource Paging MUST include a resource of type oslc:ResponseInfo, as defined in this section. [CC-17] A response info resource representation describes information about a paged HTTP response body in which it appears.

- Describes: `http://open-services.net/ns/core#ResponseInfo`
- Summary: The shape of a resource providing information about a paged HTTP response body.

ResponseInfo Properties

Prefixed Name | Occurs | Read-only | Value-type | Representation | Range | Description
--- | --- | --- | --- | --- | --- | ---
`dcterms:description` | Zero-or-one | unspecified | XMLLiteral | N/A | Unspecified | Descriptive text about resource represented as rich text in XHTML content.
`dcterms:title` | Zero-or-one | unspecified | XMLLiteral | N/A | Unspecified | Title of the resource represented as rich text in XHTML content.
`oslc:nextPage` | Zero-or-one | true | Resource | Reference | Unspecified | Link to the next page of a response.
`oslc:postBody` | Zero-or-one | true | string | N/A | Unspecified | The body of a POST request to return the next page if the response was to a POST request. Where a paged resource supports POST with an application/x-www-form-urlencoded body as an alternative to GET to avoid the request URI exceeding server limitations, the oslc:ResponseInfo in the response to the POST SHOULD contain this property so that a client knows what to POST to get the next page [CC-18].
`oslc:totalCount` | Zero-or-one | true | integer | N/A | Unspecified | This optional property indicates the total number of results across all pages, its value SHOULD be non-negative [CC-19]. In the context of a query resource, this value SHOULD be the total number of results, i.e. the number of resources that match the query [CC-20]. In the context of other resources, the value SHOULD be the total number of property values (i.e. RDF triples) of the resource [CC-21]. Unless Stable Paging is in effect, the total count MAY vary as a client retrieves subsequent pages [CC-22].

## 5. Resource Shape

The shape of an RDF resource is a description of the set of triples it is expected to contain and the integrity constraints those triples are required to satisfy. Applications of shapes include validating RDF data, documenting RDF APIs, and providing meta-data to tools, such as form and query builders, that handle RDF data. OSLC Core uses shapes to:

- Define specific vocabulary constraints including allowed values, max size, cardinality, representation in RDF specifications and if the property is read only.
- Specify the properties required for resource creation.
- Specify what servers all allow for prefilling delegated dialogs.
- Describe the results of query operations.

Constraints on OSLC Core and Domain resources SHOULD be described using ResourceShapes which is included as part of the OSLC Core multi-part specifications. [CC-23] Servers MAY use other constraint languages such as [SHACL] to define resource constraints. [CC-24]

### ResourceShape Constraints

- Describes: `http://open-services.net/ns/core#ResourceShape`
- Summary: A shape resource describes the contents of and constraints on some set of described resources.
- Description: A resource should satisfy all the constraints defined by its applicable shapes.

ResourceShape Properties

Prefixed Name | Occurs | Read-only | Value-type | Representation | Range | Description
--- | --- | --- | --- | --- | --- | ---
`dcterms:description` | Zero-or-one | true | XMLLiteral | N/A | Unspecified | The description of the defined constraint.
`dcterms:title` | Zero-or-one | true | XMLLiteral | N/A | Unspecified | The summary of this shape.
`oslc:describes` | Zero-or-many | true | Resource | Reference | `rdfs:Class` | The described resource types that this shape applies to.
`oslc:hidden` | Zero-or-one | true | boolean | N/A | Unspecified | Indicates the resource or property should not be displayed to users.
`oslc:property` | Zero-or-many | true | Resource | Inline | `oslc:Property` | Indicates an expected property of the described resources.
`rdf:type` | Zero-or-many | true | Resource | Reference | Unspecified | An OSLC resource shape SHOULD have an RDF type of oslc:ResourceShape.

### Property Constraints

- Describes: `http://open-services.net/ns/core#Property`
- Summary: Specifies the name, description, summary, occurrence, value type, allowed values, and several other aspects of the defined property.

Property Properties

Prefixed Name | Occurs | Read-only | Value-type | Representation | Range | Description
--- | --- | --- | --- | --- | --- | ---
`dcterms:description` | Zero-or-one | true | XMLLiteral | N/A | Unspecified | The description of the defined constraint.
`dcterms:title` | Zero-or-one | true | XMLLiteral | N/A | Unspecified | The summary of the defined property.
`oslc:allowedValue` | Zero-or-many | true | unspecified | Either | Unspecified | Specifies the allowed values of a property.
`oslc:allowedValues` | Zero-or-one | true | Resource | Reference | `oslc:AllowedValues` | The resource containing a set of allowed values of the defined property.
`oslc:defaultValue` | Zero-or-one | true | unspecified | Either | Unspecified | The default value of the defined property.
`oslc:hidden` | Zero-or-one | true | boolean | N/A | Unspecified | Indicates the resource or property should not be displayed to users.
`oslc:isMemberProperty` | Zero-or-one | true | boolean | N/A | Unspecified | If true then the described resource is a container and the defined property is used for container membership.
`oslc:maxSize` | Zero-or-one | true | integer | N/A | Unspecified | For string datatype properties, the maximum number of characters.
`oslc:name` | Exactly-one | true | string | N/A | Unspecified | The local name of the defined property.
`oslc:occurs` | Exactly-one | true | Resource | Reference | `oslc:Cardinality` | The number of times the defined property may occur.
`oslc:propertyDefinition` | Exactly-one | true | Resource | Reference | `rdf:Property` | The URI of the defined or constrained property.
`oslc:queryable` | Zero-or-one | true | boolean | N/A | Unspecified | Indicates whether a property is queryable (can appear in oslc.where and olsc.select clause) or not.
`oslc:range` | One-or-many | true | Resource | Reference | `rdfs:Class` | For object properties, specifies what the target resource type is expected to be, but that is not necessarily the case.
`oslc:readOnly` | Zero-or-one | true | boolean | N/A | Unspecified | If true then the defined property cannot be directly writen by clients, but may be updated indirectly by servers.
`oslc:representation` | Zero-or-one | true | Resource | Reference | `oslc:Representation` | For object properties, how the object resource is represented in the representation of the described resource.
`oslc:valueShape` | Zero-or-one | true | Resource | Reference | `oslc:ResourceShape` | For object properties, the URI of a shape resource that describes the object resource.
`oslc:valueType` | Zero-or-many | true | Resource | Reference | `oslc:ResourceValueType` | The type of values of the defined property.
`rdf:type` | Zero-or-many | true | Resource | Reference | Unspecified | An OSLC property SHOULD have an RDF type of oslc:Property.

### AllowedValues Constraints

- Describes: `http://open-services.net/ns/core#AllowedValues`
- Summary: Defines a set of allowed values for a defined property.

AllowedValues Properties

Prefixed Name | Occurs | Read-only | Value-type | Representation | Range | Description
--- | --- | --- | --- | --- | --- | ---
`oslc:allowedValue` | One-or-many | true | unspecified | Either | Unspecified | Specifies the allow values in an AllowedValue constraint.

## 6. Discovery constraints

### 6.1 Resource: ServiceProviderCatalog

- Describes: `http://open-services.net/ns/core#ServiceProviderCatalog`
- Summary: Service Provider Catalog
- Description: An LDPC describing an OSLC server that offers one or more ServiceProvider LDPCs. Servers MAY also organize the ServiceProviders in one or more ServiceProviderCatalog LDPCs to enable OSLC clients to find ServiceProviders offered [CC-25]. The members of these catalogs may include other nested catalogs as well as service providers.

ServiceProviderCatalog Properties

Prefixed Name | Occurs | Read-only | Value-type | Representation | Range | Description
--- | --- | --- | --- | --- | --- | ---
`dcterms:description` | Zero-or-one | true | XMLLiteral | N/A | Unspecified | Description of the services provided.
`dcterms:publisher` | Zero-or-one | true | AnyResource | Inline | `oslc:Publisher` | Describes the software product that provides the implementation.
`dcterms:title` | Zero-or-one | true | XMLLiteral | N/A | Unspecified | Title of this resource.
`oslc:domain` | Zero-or-many | true | Resource | Reference | Unspecified | Namespace URI of the specification that is implemented by this service. In most cases this namespace URI will be for an OSLC domain, but other URIs MAY be used [CC-26].
`oslc:oauthConfiguration` | Zero-or-many | true | AnyResource | Inline | `oslc:OAuthConfiguration` | Defines the three OAuth URIs required for a client to act as an OAuth consumer.
`oslc:serviceProvider` | Zero-or-many | true | AnyResource | Either | `oslc:ServiceProvider` | A service provider LDPC offered by this server.
`oslc:serviceProviderCatalog` | Zero-or-many | true | AnyResource | Either | `oslc:ServiceProviderCatalog` | Additional service provider catalog LDPCs used to organize services.

### 6.2 Resource: ServiceProvider

- Describes: `http://open-services.net/ns/core#ServiceProvider`
- Summary: Service Provider
- Description: An LDPC whose members are the Service LDPCs offered by an OSLC server.

ServiceProvider Properties

Prefixed Name | Occurs | Read-only | Value-type | Representation | Range | Description
--- | --- | --- | --- | --- | --- | ---
`dcterms:description` | Zero-or-one | true | XMLLiteral | N/A | Unspecified | Description of the services provided.
`dcterms:publisher` | Zero-or-one | true | AnyResource | Inline | `oslc:Publisher` | Describes the software product that provides the implementation.
`dcterms:title` | Zero-or-one | true | XMLLiteral | N/A | Unspecified | Title of this resource.
`oslc:details` | Zero-or-many | true | Resource | Reference | Unspecified | A URL that may be used to retrieve a resource to determine additional details about the service provider such as a web page describing it.
`oslc:oauthConfiguration` | Zero-or-many | true | AnyResource | Inline | `oslc:OAuthConfiguration` | Defines the three OAuth URIs required for a client to act as an OAuth consumer.
`oslc:prefixDefinition` | Zero-or-many | true | AnyResource | Inline | `oslc:PrefixDefinition` | Defines a namespace prefix for use in JSON representations and in forming OSLC Query Syntax strings.
`oslc:service` | One-or-many | true | AnyResource | Inline | `oslc:Service` | Describes a service LDPC offered by the service provider.

### 6.3 Resource: Service

- Describes: `http://open-services.net/ns/core#Service`
- Summary: Service
- Description: An LDPC whose properties describe specific services offered by a server, and the URIs to use for those services in the context of that ServiceProvider.

Service Properties

Prefixed Name | Occurs | Read-only | Value-type | Representation | Range | Description
--- | --- | --- | --- | --- | --- | ---
`oslc:creationDialog` | Zero-or-many | true | AnyResource | Inline | `oslc:Dialog` | Enables clients to create a resource via UI.
`oslc:creationFactory` | Zero-or-many | true | AnyResource | Inline | `oslc:CreationFactory` | An LDPC that enables clients to create new resources.
`oslc:domain` | Exactly-one | true | Resource | Reference | Unspecified | Namespace URI of the specification that is implemented by this service. In most cases this namespace URI will be for an OSLC domain, but other URIs MAY be used [CC-27].
`oslc:queryCapability` | Zero-or-many | true | AnyResource | Inline | `oslc:QueryCapability` | Enables clients query across a collection of resources.
`oslc:selectionDialog` | Zero-or-many | true | AnyResource | Inline | `oslc:Dialog` | Enables clients to select a resource via UI.
`oslc:usage` | Zero-or-many | true | Resource | Reference | Unspecified | An identifier URI for the domain specified usage of this resource. If a resource has multiple uses, it may designate the primary or default one that should be used with a property value of oslc:default.

### 6.4 Resource: CreationFactory

- Describes: `http://open-services.net/ns/core#CreationFactory`
- Summary: Creation Factory
- Description: A Creation Factory describes a capability for creating resources, including an LDPC capable of creating and containing new resources via HTTP POST.

CreationFactory Properties

Prefixed Name | Occurs | Read-only | Value-type | Representation | Range | Description
--- | --- | --- | --- | --- | --- | ---
`dcterms:title` | Exactly-one | true | XMLLiteral | N/A | Unspecified | Title string that could be used for display.
`oslc:creation` | Exactly-one | true | Resource | Reference | `ldp:Container` | To create a new resource via the factory, post it to this URI.
`oslc:label` | Zero-or-one | true | string | N/A | Unspecified | Very short label for use in menu items.
`oslc:resourceShape` | Zero-or-many | true | Resource | Reference | `oslc:ResourceShape` | A Creation Factory MAY provide Resource Shapes that describe shapes of resources that may be created [CC-28].
`oslc:resourceType` | Zero-or-many | true | Resource | Reference | `rdfs:Class` | The expected resource type URI of the resource that will be created using this creation factory. These would be the URIs found in the result resource's rdf:type property.
`oslc:usage` | Zero-or-many | true | Resource | Reference | Unspecified | An identifier URI for the domain specified usage of this resource. If a resource has multiple uses, it may designate the primary or default one that should be used with a property value of oslc:default.

### 6.5 Resource: QueryCapability

- Describes: `http://open-services.net/ns/core#QueryCapability`
- Summary: Query Capability
- Description: A Query Capability describes a query capability, capable of querying resources via HTTP GET or POST.

QueryCapability Properties

Prefixed Name | Occurs | Read-only | Value-type | Representation | Range | Description
--- | --- | --- | --- | --- | --- | ---
`dcterms:title` | Exactly-one | true | XMLLiteral | N/A | Unspecified | Title string that could be used for display.
`oslc:label` | Zero-or-one | true | string | N/A | Unspecified | Very short label for use in menu items.
`oslc:queryBase` | Exactly-one | true | Resource | Reference | Unspecified | The base URI to use for queries. Queries are invoked via HTTP GET on a query URI formed by appending a key=value pair to the base URI, as described in Query Capabilities section.
`oslc:resourceShape` | Zero-or-one | true | Resource | Reference | `oslc:ResourceShape` | The Query Capability SHOULD provide a Resource Shape that describes the query base URI [CC-29].
`oslc:resourceType` | Zero-or-many | true | Resource | Reference | `rdfs:Class` | The expected resource type URI that will be returned with this query capability. These would be the URIs found in the result resource's rdf:type property.
`oslc:usage` | Zero-or-many | true | Resource | Reference | Unspecified | An identifier URI for the domain specified usage of this query capability. If a service provides multiple query capabilities, it may designate the primary or default one that should be used with a property value of oslc:default.

### 6.6 Resource: Publisher

- Describes: `http://open-services.net/ns/core#Publisher`
- Summary: Publisher
- Description: A Publisher identifies and describes the software product that provides the OSLC implementation.

Publisher Properties

Prefixed Name | Occurs | Read-only | Value-type | Representation | Range | Description
--- | --- | --- | --- | --- | --- | ---
`dcterms:identifier` | Exactly-one | unspecified | string | N/A | Unspecified | A URN that uniquely identifies the implementation.
`dcterms:title` | Exactly-one | true | XMLLiteral | N/A | Unspecified | Title string that could be used for display.
`oslc:icon` | Zero-or-one | true | Resource | Reference | Unspecified | URL to an icon file that represents the provider. This icon should be a favicon format and 16x16 pixels in size.
`oslc:label` | Zero-or-one | true | string | N/A | Unspecified | Very short label for use in menu items.

### 6.7 Resource: PrefixDefinition

- Describes: `http://open-services.net/ns/core#PrefixDefinition`
- Summary: Prefix Definition
- Description: Service Providers MUST provide a Prefix Definition for each prefix supported by the service [CC-30]. Each Prefix Definition defines a namespace prefix that clients MAY use in forming OSLC Query Syntax strings [CC-31].

PrefixDefinition Properties

Prefixed Name | Occurs | Read-only | Value-type | Representation | Range | Description
--- | --- | --- | --- | --- | --- | ---
`oslc:prefix` | Exactly-one | true | string | N/A | Unspecified | Namespace prefix to be used for this namespace.
`oslc:prefixBase` | Exactly-one | true | Resource | Reference | Unspecified | The base URI of the namespace.

### 6.8 Resource: OAuthConfiguration

- Describes: `http://open-services.net/ns/core#OAuthConfiguration`
- Summary: OAuth Configuration
- Description: Service Providers that support OAuth Authentication SHOULD provide a way for clients to automatically discover the three OAuth URIs necessary to act as an OAuth Consumer [CC-32].

OAuthConfiguration Properties

Prefixed Name | Occurs | Read-only | Value-type | Representation | Range | Description
--- | --- | --- | --- | --- | --- | ---
`oslc:authorizationURI` | Exactly-one | true | Resource | Reference | Unspecified | URI for obtaining OAuth authorization.
`oslc:oauthAccessTokenURI` | Exactly-one | true | Resource | Reference | Unspecified | URI for obtaining OAuth access token.
`oslc:oauthRequestTokenURI` | Exactly-one | true | Resource | Reference | Unspecified | URI for obtaining OAuth request token.

## 7. Resource Preview Constraints

### 7.1 Resource: Compact

- Describes: `http://open-services.net/ns/core#Compact`
- Summary: Describes how to display a resource preview.

Compact Properties

Prefixed Name | Occurs | Read-only | Value-type | Representation | Range | Description
--- | --- | --- | --- | --- | --- | ---
`dcterms:title` | Zero-or-one | true | string | N/A | Unspecified | Title that may be used in the display of a link to the resource. The value should include only content that is valid inside an HTML <span> element. Providers should include a dcterms:title property with an informative label for the resource. The title is typically shown to a user as a hyperlink. For a resource with no obvious title, Providers should omit the dcterms:title property. Providers must first HTML escape the contents of the dcterms:title before sending the response.
`oslc:icon` | Zero-or-one | true | Resource | Reference | Unspecified | URI of an image which may be used in the display of a link to the resource.
`oslc:iconAltLabel` | Zero-or-one | true | string | N/A | Unspecified | Alternative label used in association with the oslc:icon, such as HTML img tag's alt attribute.
`oslc:iconSrcSet` | Zero-or-one | true | string | N/A | Unspecified | Specification of a set of images of different sizes based on HTML img element srcset attribute.
`oslc:iconTitle` | Zero-or-one | true | string | N/A | Unspecified | Title used in association with the oslc:icon, such as HTML img tag's title attribute.
`oslc:largePreview` | Zero-or-one | true | AnyResource | Either | `oslc:Preview` | URI and sizing properties for an HTML document to be used for a large preview.
`oslc:shortTitle` | Zero-or-one | true | string | N/A | Unspecified | Abbreviated title which may be used in the display of a link to the resource. The value should include only content that is valid inside an HTML <span> element. Providers should include an abbreviated title for the resource when possible. The abbreviated title is typically shown to a user as a hyperlink in presentations where visual space is limited. As a general guideline, the length of the abbreviated title should be 5 characters or less. A user-visible identifier that ordinarily appears in the dcterms:title, such as a defect number, makes for a good oslc:shortTitle value. When a resource has no obvious identifier or handle, Providers should omit the oslc:shortTitle property. Providers must first HTML escape the contents of the oslc:shortTitle before sending the response.
`oslc:smallPreview` | Zero-or-one | true | AnyResource | Either | `oslc:Preview` | URI and sizing properties for an HTML document to be used for a small preview.

### 7.2 Resource: Preview

- Describes: `http://open-services.net/ns/core#Preview`
- Summary: An HTML representation of a resource that can be embedded in another user interface.

Preview Properties

Prefixed Name | Occurs | Read-only | Value-type | Representation | Range | Description
--- | --- | --- | --- | --- | --- | ---
`oslc:document` | Exactly-one | true | Resource | Reference | Unspecified | The URI of an HTML document to be used for the preview.
`oslc:hintHeight` | Zero-or-one | true | string | N/A | Unspecified | Recommended height of the preview. Values are expressed using length units as specified in [CSS21].
`oslc:hintWidth` | Zero-or-one | true | string | N/A | Unspecified | Recommended width of the preview. Values are expressed using length units as specified in [CSS21].

## 8. Delegated Dialogs Constraints

- Describes: `http://open-services.net/ns/core#Dialog`
- Summary: Describes information about a dialog such as its title and dimensions.

Dialog Properties

Prefixed Name | Occurs | Read-only | Value-type | Representation | Range | Description
--- | --- | --- | --- | --- | --- | ---
`dcterms:title` | Exactly-one | true | XMLLiteral | N/A | Unspecified | Title string that could be used for display.
`oslc:dialog` | Exactly-one | true | unspecified | Either | Unspecified | The URI of the dialog.
`oslc:hintHeight` | Zero-or-one | true | unspecified | Either | Unspecified | Recommended height of the dialog. Values are expressed using length units as specified in [CSS21].
`oslc:hintWidth` | Zero-or-one | true | unspecified | Either | Unspecified | Recommended width of the dialog. Values are expressed using length units as specified in [CSS21].
`oslc:label` | Zero-or-one | true | string | N/A | Unspecified | Very short label for use in menu items.
`oslc:resourceShape` | Zero-or-many | true | Resource | Reference | `oslc:ResourceShape` | Describes constraints on dialog prefill requests.
`oslc:resourceType` | Zero-or-many | true | Resource | Reference | `rdfs:Class` | The expected resource type URI for the resources that will be returned when using this dialog. These would be the URIs found in the result resource's `rdf:type` property.
`oslc:usage` | Zero-or-many | true | Resource | Reference | Unspecified | An identifier URI for the domain specified usage of this dialog. If a resource has multiple uses, it may designate the primary or default one that should be used with a property value of oslc:default.

## 9. Resource Constraints

### 9.1 Resource: AttachmentDescriptor

The `oslc:AttachmentDescriptor` resource type is used to describe the binary resource (or non-RDF Resource) associated with a particular resource. When a client POSTs an attachment content to a server, the server stores the attachment content and assigns a URI just like any other type of resource creation but it may also create an `oslc:AttachmentDescriptor` resource to contain data about the attachment.

There is no restriction on the content of each attachment resource. For example, it could be a photo of a kitten, an installation manual, a log file, or a source code patch. Since the attachment cannot be expected to contain additional client or server supplied data, a typical set of properties for each attachment is included with the `oslc:AttachmentDescriptor` resource itself. Thus, the object of each `oslc:attachment` statement is the binary attachment. Issuing an HTTP HEAD or GET operation on that binary attachment resource URL should produce an HTTP response with a header value of `Link: rel='describedBy'` to indicate the URL of the `oslc:AttachmentDescriptor` resource. The properties for the `oslc:AttachmentDescriptor` resource are indicated in the table below.

- Describes: `http://open-services.net/ns/core#AttachmentDescriptor`
- Summary: LDP-RS to contain data about a LDP-NR(Attachment)

AttachmentDescriptor Properties

Prefixed Name | Occurs | Read-only | Value-type | Representation | Range | Description
--- | --- | --- | --- | --- | --- | ---
`dcterms:created` | Zero-or-one | true | dateTime | N/A | Unspecified | Timestamp of attachment creation.
`dcterms:creator` | Zero-or-many | true | AnyResource | Either | Unspecified | Creator or creators of the attachment. Likely a `foaf:Person`, but not necessarily so.
`dcterms:description` | Zero-or-one | false | XMLLiteral | N/A | Unspecified | Descriptive text about the attachment.
`dcterms:format` | Zero-or-one | true | unspecified | Either | Unspecified | MIME type of the attachment content; SHOULD be a PURL media-type resource [CC-33].
`dcterms:identifier` | Zero-or-one | true | string | N/A | Unspecified | System-assigned identifier.
`dcterms:title` | Zero-or-one | false | string | N/A | Unspecified | Client-specified file name or title.
`oslc:attachmentSize` | Zero-or-one | true | integer | N/A | Unspecified | Size in bytes of the attachment content.

## 10. Conformance

OSLC servers MUST follow the constraints defined here where required, and with the meanings defined here. [CC-34]

OSLC servers MAY provide additional constraints for specific purposes. [CC-35]

Clause Number | Requirement
--- | ---
CC-1 | Different sets of constraints MAY be applied to a vocabulary in order to tailor its use, without overly constraining the vocabulary for other usages.
CC-2 | OSLC domains SHOULD use these properties where applicable rather than defining their own properties
CC-3 | However, a domain MAY apply its own constraints for particular resource shapes
CC-4 | Changes to the OSLC Core Vocabulary MUST be approved by the OASIS OSLC Open Project.
CC-5 | Domain TCs and other extensions MUST contribute their vocabulary terms in a namespace which is assigned to them as an authority.
CC-6 | OSLC Core, domain and other extensions SHOULD reuse existing vocabulary terms from stable vocabularies such as [DC-TERMS], RDF [rdf11-concepts], RDF Schema [rdf-schema], [FOAF], [skos-reference] and OSLC.
CC-7 | New vocabulary terms SHOULD only be created when there is no clear existing choice available.
CC-8 | Details or body of the comment; SHOULD include only content that is valid and suitable inside an XHTML `<div>` element
CC-9 | A brief title for the comment; SHOULD include only content that is valid and suitable inside an XHTML `<span>` element
CC-10 | When an OSLC Server incurs an error, it is RECOMMENDED that useful information be provided to clients in the body of the HTTP response.
CC-11 | OSLC Servers SHOULD use the Error resource defined below as the basis for forming error responses.
CC-12 | OSLC Servers SHOULD return an Error resource using the same representation format requested by the client via the HTTP `Accept` request header. [HTTP11]
CC-13 | OSLC Clients SHOULD treat the `oslc:statusCode` as a String that starts with digits, but MAY contain non-digit text.
CC-15 | Values MUST be expressed in relative length units as defined in the W3C Cascading Style Sheets Specification (CSS 2.1) Em and ex units are interpreted relative to the default system font (at 100% size)
CC-16 | A resource giving more information on the error SHOULD be of an HTML content-type
CC-17 | Resource representations returned via [OSLCCore2] Resource Paging MUST include a resource of type oslc:ResponseInfo, as defined in this section.
CC-18 | Where a paged resource supports POST with an application/x-www-form-urlencoded body as an alternative to GET to avoid the request URI exceeding server limitations, the oslc:ResponseInfo in the response to the POST SHOULD contain this property so that a client knows what to POST to get the next page
CC-19 | This optional property indicates the total number of results across all pages, its value SHOULD be non-negative
CC-20 | In the context of a query resource, this value SHOULD be the total number of results, i.e. the number of resources that match the query
CC-21 | In the context of other resources, the value SHOULD be the total number of property values (i.e. RDF triples) of the resource
CC-22 | Unless Stable Paging is in effect, the total count MAY vary as a client retrieves subsequent pages
CC-23 | Constraints on OSLC Core and Domain resources SHOULD be described using ResourceShapes which is included as part of the OSLC Core multi-part specifications.
CC-24 | Servers MAY use other constraint languages such as [SHACL] to define resource constraints.
CC-25 | Servers MAY also organize the ServiceProviders in one or more ServiceProviderCatalog LDPCs to enable OSLC clients to find ServiceProviders offered
CC-26 | In most cases this namespace URI will be for an OSLC domain, but other URIs MAY be used
CC-27 | In most cases this namespace URI will be for an OSLC domain, but other URIs MAY be used
CC-28 | A Creation Factory MAY provide Resource Shapes that describe shapes of resources that may be created
CC-29 | The Query Capability SHOULD provide a Resource Shape that describes the query base URI
CC-30 | Service Providers MUST provide a Prefix Definition for each prefix supported by the service
CC-31 | Each Prefix Definition defines a namespace prefix that clients MAY use in forming OSLC Query Syntax strings
CC-32 | Service Providers that support OAuth Authentication SHOULD provide a way for clients to automatically discover the three OAuth URIs necessary to act as an OAuth Consumer
CC-33 | MIME type of the attachment content; SHOULD be a PURL media-type resource
CC-34 | OSLC servers MUST follow the constraints defined here where required, and with the meanings defined here.
CC-35 | OSLC servers MAY provide additional constraints for specific purposes.