[This local archive copy mirrored from the canonical site: http://www.w3.org/TR/1998/WD-rdf-schema-19980409; links may not have complete integrity, so use the canonical document at this URL if possible.]

W3C WD-rdf-schema-19980409


Resource Description Framework
(RDF) Schemas

W3C Working Draft 9 April 1998

This Version:
http://www.w3.org/TR/1998/WD-rdf-schema-19980409
Latest Version:
http://www.w3.org/TR/WD-rdf-schema
Previous Version:
(none)
Editors:
Dan Brickley, University of Bristol
R.V. Guha, Netscape
Andrew Layman, Microsoft

Acknowledgements

Copyright ©1998 W3C (MIT, INRIA, Keio) , All Rights Reserved. W3C liability, trademark, document use and software licensing rules apply.

Status of this document

This draft document is a work in progress. It represents the deliberations of the W3C RDF Schema Working Group as of the date it was issued. The Working Group has not reached full consensus on all parts of this draft and is continuing to refine this document; we are issuing this document to solicit comments on our progress. We especially call the reader's attention to Appendix C ("Open Issues").

The Resource Description Framework is part of the W3C Metadata Activity. The goal of this activity, and of RDF specifically, is to produce a language for the exchange of machine-understandable descriptions of resources on the Web. A separate specification describes the data model and syntax for the interchange of metadata using RDF.

Comments may be sent to www-rdf-comments@w3.org. The public archive of these comments is available at http://lists.w3.org/Archives/Public/www-rdf-comments/

We strongly recommend that only experimental software be implemented to this document. It is our belief that this document does not sufficiently constrain implementations to guarantee interoperability. This Working Group will not allow early implementations to affect their ability to make substantial changes to future versions of this document.

This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to use W3C Working Drafts as reference material or to cite them as other than "work in progress".

Note: As working drafts are subject to frequent change, you are advised to reference the above URL for "Latest version" rather than the URLs for working draft versions themselves. The latest version URL will always point to the most current version of this draft.


RDF Schemas

1. Motivation and Scope

The model described by this document uses RDF concepts to provide a basic schema for RDF.

An RDF schema is a collection of information about classes of RDF nodes, including properties and relations. This paper supplements the RDF Model and Syntax [RDFMS] specification by providing a typing system: informally, it is a basic set of nodes and relations that can be used to express properties of classes of RDF nodes. It includes a facility to indicate that certain classes are subclasses of others, and provides a small number of basic classes. Finally, it contains a facility for specifying a small number of constraints such as the cardinality (number of occurences) required and permitted of properties of instances of classes.

This document does not define classes applying to specific application domains. For example, it does not define classes such as "Author" or "DigitalSignature." Instead, it provides a mechanism that can be used to define characteristics of such classes.

RDF schemas are specified using a declarative representation language influenced by ideas from knowledge representation, e.g., semantic nets, frames, and predicate logic, as well as database schema representation models such as binary relational models ([NIAM], etc.) and graph data models. The RDF schema specification language is less expressive, but simpler, than full predicate calculus languages such as CycL [CycL] and KIF [KIF].

1.1 The Scope

RDF Schemas aim, not at theoretical issues, but at solving a small number of immediate problems. Its creators expect that other problems (listed in the appendix) will share similar characteristics and that they also may be able to use the basic classes described in this paper.

This paper was directly influenced by consideration of the following problems:

1. PICS

The RDF Model and Syntax is adequate to represent most of PICS [PICS], however, it requires augmentation by features such as the ability to specify a default rating for any page with a certain URL prefix. This draft does not yet provide such a mechanism.

2. Simple Web Metadata

One obvious application for RDF is in the description of web pages. This is one of the basic functions of the Dublin Core [DC] initiative. The Dublin Core is a set of 15 elements believed to be broadly applicable to describing web resources to enable their discovery. The Dublin Core has been a major influence on the development of RDF. An important consideration in the development of the Dublin Core was to allow simple descriptions, but also to provide the ability to qualify descriptions in order to provide both domain specific elaboration and descriptive precision.

The RDF Schema mechanism proposed in this paper provides a machine-understandable system for defining 'schemas' for descriptive vocabularies like the Dublin Core. It allows designers to specify classes of Resource types, property types to convey descriptions of those classes, and constraints on the allowed combinations of classes, property types, and values.

An initial schema for the simple Dublin Core is provided in Appendix D. This schema defines the 15 elements as property types, and gives a description of their purpose. Despite the simplicity of the definition, it is believed that this schema serves as the foundation for more elaborate definitions. Future extensions are likely to specify the structure of the values of the properties, which will involve defining classes, the property types that apply to those classes, and some constraints on the property values. In order for browsers and authoring tools to understand and enforce these constraints, this information should be machine understandable. This document provides a machine understandable schema language for expressing such definitions and constraints.

3. Sitemaps and other such Navigation Tools

A sitemap is some kind of hierarchical description of a site. A subject taxonomy is a taxonomy such as that used by Yahoo!, Excite, etc. RDF Schemas aims to provide a mechanism by which sitemaps and taxonomies using the RDF Model can express the classes of nodes, properties, relations etc. they use.

4. P3P

The W3C Platform for Privacy Preferences Project (P3P) requires a grammar for constructing statements about a site's data collection practices, personal preferences as exercised over those practices, as well as a syntax for exchanging structured data. The ability for third party assurances (signed statements) regarding P3P practices is also important. For instance, entities may wish to certify that P3P practice statements were properly generated in accordance with industry guidelines, have been audited, or are compliant with the relevant privacy regulations.

These problems have influenced the design of this first version of the RDF Schema. RDF is tailored for easy extensibility. If RDF succeeds, we expect that future versions of RDF will be more ambitious and include more problems in their design space.

1.2 Specifying the Schema

An RDF Schema can be expressed by the data model described in the RDF Model and Syntax [RDFMS] document. The schema description language is simply a set of resources and property types defined by this paper and implicitly part of every RDF graph using this schema machinery.

For this release of the document, we have concentrated on identifying the set of RDF resources and property types and their relationships. We especially solicit comment on the understandability of the names we have chosen for these.


2. The RDF Schema Core

The following resources belong to the Core RDF Schema. We first define the type system and then introduce property types for expressing various kinds of constraints.

2.1 The Type System

The RDF Schema defined in this paper is a set of RDF resources and property types that can be used to describe classes of RDF nodes, including properties and relations. They are defined in a namespace informally called 'RDFS' here and which will be more formally defined and given a URI in the future.

As described in the RDF Model and Syntax paper, nodes may be RDF:instanceOf one or more classes. However, classes themselves are often used in a hierarchical fashion, for example considering the class 'dog' to be a subclass of 'animal,' which is a subclass of 'organism' etc., meaning that any node which is an RDF:instanceOf 'dog' is ipso facto an RDF:instanceOf 'animal' and so on. This paper describes a property type, RDFS:subClassOf, indicating such a relationship.

In addition to describing the RDFS:subClassOf relation between classes, this paper defines a small number of other resources and properties that express constraints on instances of classes, such things as statements that all instances of a class have certain properties or relations, limitations on the types of values that are valid for a property or relation, as well as the cardinality of those properties and relations. This paper gives a mechanism for describing such constraints, but does not say whether or how an application must process the constraint information. For example, while an RDF schema may express that a 'Book' may have an 'author' property, it does not say whether or how an application should act in processing that information. We expect that different applications will use these constraints in different ways. e.g., a validator will look for errors, an editor might suggest legal values.

We anticipate the development of a set of classes corresponding to a set of "datatypes." This paper does not define datatypes, but does note that datatypes may be used as the value of the RDFS:range property.

2.2 Core Classes

The following resources are core classes that are defined as part of the RDF Schema machinery. Every RDF graph (implicitly) includes these.

2.2.1 RDF:Resource
All resources, i.e., all the elements of the set N defined in section 2.1 of the RDF Model and Syntax document, are instances of RDF:Resource. This roughly corresponds to the concept of Object in Java.

2.2.2 RDF:PropertyType
All the property types, i.e., all the elements of the set P defined in section 2.1 of the RDF Model and Syntax document, are instances of RDF:PropertyType. Conversely, every instance of RDF:PropertyType is an element of P.

2.2.3 RDFS:Class
This corresponds to the generic concept of a Type or Category. When a schema defines a new class, the node representing that class must have an RDF:instanceOf arc to this node. Classes can be defined to represent almost anything, such as web pages, people, cars, rabbits, and animals.

2.3 Core PropertyTypes

Every RDF graph also (implicitly) includes the following core property types. These are instances of the PropertyType class and provide a mechanism for expressing relationships between classes and their instances or superclasses.

2.3.1 RDF:instanceOf
This indicates that a resource is a member of a class, and thus has all the characteristics that are to be expected of a member of that class. It is a relation between a resource and another resource which must be an instance of Class. A resource may be an instance of more than one class.

2.2.2 RDFS:subClassOf
This indicates the subset/superset relation between classes. RDFS:subClassOf is transitive. If B is a sub-class of A and X is an instance of B, then X is also an instance of A. Only instances of Class can have this property type and the property value is always an instanceOf Class. A Class may be a subClassOf more than one Class.

3. Constraints

An RDF schema can declare constraints associated with classes and property types. Some examples of constraints include:
  1. That the value of a property should be a resource of a designated class. This is expressed by the range property type. For example, a range constraint applying to the 'author' property type may express that the value of an 'author' property must be a resource of class 'Person'.
  2. That the resource may have properties of a given property type. For example, that a resource of class 'Book' may have a property of type 'author'. This is expressed using the allowedPropertyType property type. This constraint allows one -- in effect -- to implement domain-constraints for property types.
  3. The cardinality of a property type, that is, the number of properties of a given type that a resource may have. This is described by the necessity property type. For example, it may express that any given resource may have at most one property of type 'age'.

3.1 Core Constraints

3.1.1 RDFS:ConstraintPropertyType
This resource defines a subclass of the PropertyTypes, all of whose instances are property types used to specify constraints. The rest of the property types defined in section 3 are instances of this class.

3.1.2 RDFS:range
An instance of ConstraintPropertyType that is used to constrain property values. The value of a range property is always a Class. The property value of a property type whose range is A is constrained to be an instanceOf A. A property type can have at most one range property. It is possible for it to have no range, in which case, the property value could be anything.

3.1.3 RDFS:allowedPropertyType
An instance of ConstraintPropertyType that is used to specify the properties that the instances of a Class may have.

3.1.4 RDFS:necessity
An instance of ConstraintPropertyType that is used to constrain the cardinality of a property type. RDFS:necessity has a range of RDFS:NecessityValue (defined below).

3.2 Cardinality Constraints

The property necessity is used to specify whether a certain property type is

3.2.5 RDFS:NecessityValue
RDFS:ExactlyOne, RDFS:OneOrMore, RDFS:ZeroOrOne and RDFS:ZeroOrMore are all instances of the class RDFS:NecessityValue.

3.3 Miscellaneous

3.3.1 RDFS:comment
This is used to provide a human readable natural language description of a resource.

The Model and Syntax specification introduces certain concepts. Here we define resources corresponding to these concepts.

3.3.6: RDFS:String
This corresponds to the definition of a String in the Model and Syntax document [RDFMS].

4. Figures

Figure 1 illustrates the concepts of Class, subClass, and Resource. A Class is depicted by a rounded rectangle, a Resource is depicted by a large dot. In the figure below, arrows are drawn from a Resource to the Class it defines. A subClass is shown by having a rounded rectangle (the subclass) completely enclosed by another (the superclass). If a Resource is inside a Class, then there exists either an explicit or implicit "RDF:instanceOf" arc from the Resource to the Resource that defines the Class. (Those arcs are shown in figure 2).

Figure 1: Classes and Resources as Sets and Elements
Figure 1: Classes and Resources as Sets and Elements

Figure 2 shows the same information about the class hierarchy as in figure 1, but does so in terms of the RDF data model. If a class is a subset of another, then there is a RDFS:subClassOf arc from the node representing the first class to the node representing the second. Similarly, if a Resource was an instance of a Class, then there is an RDF:instanceOf arc from the resource to the node representing the class. (Not all such arcs are shown. We only show the arc to the most tightly encompassing class, and rely on the transitivity of the 'subClassOf' relation to provide the rest).

Figure 2: Class Hierarchy for the RDF Schema
Figure 2: Class Hierarchy for the RDF Schema


The RDF Schema uses the constraint property types to constrain how its own PropertyTypes can be used. These constraints are shown below in figure 3.

Figure 3:  Constraints in the RDF Schema
Figure 3: Constraints in the RDF Schema

5. Acknowledgements

Note: This document was prepared and approved for publication by the W3C RDF Schema Working Group (WG). WG approval of this document does not necessarily imply that all WG members voted for its approval.

David Singer of IBM is the chair of the group; we thank David for his efforts and thank IBM for supporting him and us in this endeavor.

Ron Daniel produced all the graphics for this document.

The working group membership has included:

Nick Arnett (Verity), Dan Brickley (ILRT/University of Bristol), Walter Chang (Adobe), Sailesh Chutani (Oracle), Ron Daniel (Los Alamos National Laboratory), Joe Lapp (webMethods Inc.), Patrick Gannon (CommerceNet), RV Guha (Netscape), Tom Hill (Apple Computer), Renato Iannella (DSTC), Sandeep Jain (Oracle), Kevin Jones, (InterMind), Emiko Kezuka (Digital Vision Laboratories), Ora Lassila (Nokia Research Center), Andrew Layman (Microsoft), John McCarthy (Lawrence Berkeley National Laboratory), Norbert Mikula (DataChannel), Eric Miller (OCLC), Frank Olken (Lawrence Berkeley National Laboratory), Sri Raghavan (Digital), Lisa Rein (webMethods Inc.), Tsuyoshi Sakata (Digital Vision Laboratories), Leon Shklar (Pencom Web Works), David Singer (IBM), Wei (William) Song (SISU), Neel Sundaresan (IBM), Ralph Swick (W3C), Naohiko Uramoto (IBM), Charles Wicksteed (Reuters Ltd.), Misha Wolf (Reuters Ltd.)

Not all of the people listed above have been members throughout the entire duration of the working group, but all have contributed to the evolution of this document.


Appendix A: XML serialization of the core RDF Schema graph

The RDF specification of the above is given below in the serialization syntax. Please note that the namespace URIs listed are examples only; formal identifiers have not yet been assigned for these schemas.


<?xml:namespace ns='http://www.w3.org/TR/WD-rdf-syntax/' prefix='RDF' ?>
<?xml:namespace ns='http://www.w3.org/TR/WD-rdf-schema/' prefix='RDFS' ?>


<RDF:RDF>

<RDF:Description ID="Resource">
 <RDF:instanceOf RDF:HREF="#Class"/>
  <RDFS:comment>The most general class</RDFS:comment>
  <RDFS:allowedPropertyType>
    <RDF:Description ID="instanceOf">
       <RDF:instanceOf RDF:HREF="#PropertyType"/>
       <RDFS:comment>The basic instanceOf property</RDFS:comment>
       <RDFS:range     RDF:HREF="#Class"/>
       <RDFS:necessity RDF:HREF="#OneOrMore"/>
    </RDF:Description>
  </RDFS:allowedPropertyType>
  <RDFS:allowedPropertyType>
    <RDF:Description ID="comment">
       <RDF:instanceOf RDF:HREF="#PropertyType"/>
       <RDFS:comment>Use this for descriptions</RDFS:comment>
       <RDFS:range     RDF:HREF="#String"/>
       <RDFS:necessity RDF:HREF="#ZeroOrMore"/>
    </RDF:Description>
  </RDFS:allowedPropertyType>
</RDF:Description>


<RDF:Description ID="Class">
   <RDF:instanceOf RDF:HREF="#Class"/>
   <RDFS:comment>The concept of Class</RDFS:comment>
   <RDFS:subClassOf RDF:HREF="#Resource"/>
   <RDFS:allowedPropertyType>
     <RDF:Description ID="subClassOf">
       <RDF:instanceOf RDF:HREF="#PropertyType"/>
       <RDFS:comment>The basic SubClassOf property</RDFS:comment>
       <RDFS:range     RDF:HREF="#Class"/>
       <RDFS:necessity     RDF:HREF="#ZeroOrMore"/>
    </RDF:Description>
   </RDFS:allowedPropertyType>
   <RDFS:allowedPropertyType>
     <RDF:Description ID="allowedPropertyType">
       <RDF:instanceOf RDF:HREF="#ConstraintPropertyType"/>
       <RDFS:comment>This is how we associate a class to properties that its instances can have</RDFS:comment>
       <RDFS:range     RDF:HREF="#PropertyType"/>
       </RDF:Description>
   </RDFS:allowedPropertyType>
</RDF:Description>

<RDF:Description ID="ConstraintPropertyType">
  <RDF:instanceOf RDF:HREF="#Class"/>
  <RDFS:subClassOf RDF:HREF="#PropertyType"/>
</RDF:Description>

<RDF:Description ID="PropertyType">
   <RDFS:comment>The concept of a property type.</RDFS:comment>
   <RDFS:subClassOf RDF:HREF="#Resource"/>
   <RDFS:allowedPropertyType>
     <RDF:Description ID="range">
       <RDF:instanceOf RDF:HREF="#ConstraintPropertyType"/>
       <RDFS:comment>Property types that can be used in a schema to provide constraints</RDFS:comment>
       <RDFS:range     RDF:HREF="#Class"/>
       <RDFS:necessity RDF:HREF="#ZeroOrOne"/>
     </RDF:Description>
   </RDFS:allowedPropertyType>
   <RDFS:allowedPropertyType>
     <RDF:Description ID="necessity">
       <RDF:instanceOf RDF:HREF="#ConstraintPropertyType"/>
       <RDFS:comment>Used to constrain the cardinality of a property type.</RDFS:comment>
       <RDFS:range href="#NecessityValue"/>
     </RDF:Description>
   </RDFS:allowedPropertyType>
</RDF:Description>

<RDF:Description ID="NecessityValue">
    <RDF:instanceOf RDF:HREF="#Class"/>
    <RDFS:subClassOf RDF:HREF="#Resource"/>
</RDF:Description>

<RDF:Description ID="OneOrMore">
    <RDF:instanceOf RDF:HREF="#NecessityValue"/>
</RDF:Description>

<RDF:Description ID="ZeroOrMore">
    <RDF:instanceOf RDF:HREF="#NecessityValue"/>
</RDF:Description>

<RDF:Description ID="ZeroOrOne">
    <RDF:instanceOf RDF:HREF="#NecessityValue"/>
</RDF:Description>

<RDF:Description ID="ExactlyOne">
    <RDF:instanceOf RDF:HREF="#NecessityValue"/>
</RDF:Description>

<RDF:Description ID="String">
    <RDF:instanceOf RDF:HREF="#Resource"/>
</RDF:Description>

</RDF:RDF>



The following is the same specification, using the abbreviated syntax. Please note that the namespace URIs listed are examples only; formal identifiers have not yet been assigned for these schemas.


<?xml:namespace ns='http://www.w3.org/TR/WD-rdf-syntax/' prefix='RDF' ?>
<?xml:namespace ns='http://www.w3.org/TR/WD-rdf-schema/' prefix='RDFS' ?>

<RDF:RDF>

<RDFS:Class ID="Resource">
<RDFS:comment>The most general class</RDFS:comment>
<RDFS:allowedPropertyType>
  <RDF:PropertyType ID="instanceOf">
     <RDFS:comment>The basic instanceOf property</RDFS:comment>
     <RDFS:range   RDF:HREF="#Class"/>
     <RDFS:necessity RDF:HREF="#OneOrMore"/>
  </RDF:PropertyType>
</RDFS:allowedPropertyType>

<RDFS:allowedPropertyType>
  <RDF:PropertyType ID="comment">
     <RDFS:comment>Use this for comments</RDFS:comment>
     <RDFS:range   RDF:HREF="#String"/>
  </RDF:PropertyType>
</RDFS:allowedPropertyType>
</RDFS:Class>


<RDFS:Class ID="ConstraintPropertyType">
<RDFS:subClassOf RDF:HREF="#PropertyType"/>
</RDFS:Class>

<RDFS:Class ID="Class">
 <RDFS:comment>The concept of Class</RDFS:comment>
 <RDFS:subClassOf RDF:HREF="#Resource"/>
 <RDFS:allowedPropertyType>
   <RDF:PropertyType ID="subClassOf">
     <RDFS:comment>The basic SubClassOf property</RDFS:comment>
     <RDFS:range   RDF:HREF="#Class"/>
     <RDFS:necessity RDF:HREF="#ZeroOrMore"/>
  </RDF:PropertyType>
 </RDFS:allowedPropertyType>
 <RDFS:allowedPropertyType>
     <RDFS:ConstraintPropertyType ID="allowedPropertyType">
     <RDFS:comment>This is how we associate a class to properties that its instances can have.</RDFS:comment>
     <RDFS:range   RDF:HREF="#PropertyType"/>
     </RDFS:ConstraintPropertyType>
 </RDFS:allowedPropertyType>
</RDFS:Class>

<RDFS:Class ID="PropertyType">
 <RDFS:comment>Used to constrain the cardinality of a property type.</RDFS:comment>
 <RDFS:subClassOf RDF:HREF="#Resource"/>
 <RDFS:allowedPropertyType>
   <RDFS:ConstraintPropertyType ID="range">
     <RDFS:comment>...</RDFS:comment>
     <RDFS:range   RDF:HREF="#Class"/>
     <RDFS:necessity RDF:HREF="#ZeroOrOne"/>
   </RDFS:ConstraintPropertyType>
 </RDFS:allowedPropertyType>
 <RDFS:allowedPropertyType>
   <RDFS:ConstraintPropertyType ID="necessity">
       <RDFS:comment>...</RDFS:comment>
       <RDFS:range  href="#NecessityValue"/>
   </RDFS:ConstraintPropertyType>
 </RDFS:allowedPropertyType>
</RDFS:Class>

<RDFS:Class ID="NecessityValue">
 <RDFS:subClassOf RDF:HREF="#Resource"/>
</RDFS:Class>

<RDFS:NecessityValue ID="OneOrMore"/>
<RDFS:NecessityValue ID="ZeroOrMore"/>
<RDFS:NecessityValue ID="ZeroOrOne"/>
<RDFS:NecessityValue ID="ExactlyOne"/>

<RDF:Resource ID="String"/>


</RDF:RDF>



Appendix B: Further Examples

This section gives some brief examples of using the RDF Schema machinery to define classes and property types for some likely purposes.

Example 1

Person is a class.
Person's comment is "Class for representing people. Instances correspond to a single person."
Person is a subclass of Animal.
Person may have an age with value integer.
Person must have an ssn ("Social Security Number") with value integer.
Person's marital status is one of {Married, Divorced, Single, Widowed}

<?xml:namespace ns='http://www.w3.org/TR/WD-rdf-syntax/' prefix='RDF' ?>
<?xml:namespace ns='http://www.w3.org/TR/WD-rdf-schema/' prefix='RDFS' ?>

<RDF:RDF>

<RDFS:Class ID="Person">
  <RDFS:comment>Class for representing people. Instances correspond to a single
 person.</RDFS:comment>
  <RDFS:subClassOf RDF:HREF="#Animal"/>
  <RDFS:allowedPropertyType>
    <RDF:PropertyType ID="age">
      <RDFS:range RDF:HREF="http://www.w3.org/FictionalSchemas/useful_types#Integer"/>
    </RDF:PropertyType>
  </RDFS:allowedPropertyType>
  <RDFS:allowedPropertyType>
    <RDF:PropertyType ID="ssn">
      <RDFS:comment>Social Security Number</RDFS:comment>
      <RDFS:range RDF:HREF="http://www.w3.org/FictionalSchemas/useful_types#Integer"/>
      <RDFS:necessity RDF:HREF="http://www.w3.org/TR/WD-rdf-schema#ExactlyOne"/>
    </RDF:PropertyType>
  </RDFS:allowedPropertyType>
  <RDFS:allowedPropertyType>
     <RDF:PropertyType ID="maritalStatus">
       <RDFS:necessity RDF:HREF="http://www.w3.org/TR/WD-rdf-schema#ZeroOrOne" />
       <RDFS:range href="#MaritalStatus"/>
     </RDF:PropertyType>
  </RDFS:allowedPropertyType>
</RDFS:Class>

<RDFS:Class ID="MaritalStatus"/>

<MaritalStatus  ID="Married"/>
<MaritalStatus  ID="Divorced"/>
<MaritalStatus  ID="Single"/>
<MaritalStatus  ID="Widowed"/>


</RDF:RDF>

Example 2

SearchQuery is a class.
Every SearchQuery must have both a queryString whose value a String and a queryService whose value is a SearchService.
A SearchService is a subclass of InternetService (which is defined elsewhere).
A SearchQuery has some number of results (whose value is SearchResult).
Each SearchResult has a title (value is a string), a rating (value is a percentage) and of course, the page itself.

<?xml:namespace ns='http://www.w3.org/TR/WD-rdf-syntax/' prefix='RDF' ?>
<?xml:namespace ns='http://www.w3.org/TR/WD-rdf-schema/' prefix='RDFS' ?>

<RDF:RDF>

<RDFS:Class ID="SearchQuery">
   <RDFS:allowedPropertyType>
      <RDF:PropertyType ID="queryString">
         <RDF:range RDF:HREF="http://www.w3.org/FictionalSchemas/useful_types#String"/>
         <RDFS:necessity RDF:HREF="http://www.w3.org/TR/WD-rdf-schema#OneOrMore"/>
      </RDF:PropertyType>
   </RDFS:allowedPropertyType>
   <RDFS:allowedPropertyType>
      <RDF:PropertyType ID="queryService">
         <RDFS:necessity RDF:HREF="http://www.w3.org/TR/WD-rdf-schema#OneOrMore"/>
         <RDFS:range>
           <RDFS:Class ID="SearchService">
               <RDFS:subClassOf RDF:HREF="http://www.foo.org/Sch1.rdf#InternetService"/>
           </RDFS:Class>
         </RDFS:range>
      </RDF:PropertyType>
   </RDFS:allowedPropertyType>
   <RDFS:allowedPropertyType>
      <RDF:PropertyType ID="result">
         <RDFS:range>
           <RDFS:Class ID="SearchResult">
               <RDFS:subClassOf RDF:HREF="http://www.w3.org/TR/WD-rdf-syntax#Resource"/>
               <RDFS:allowedPropertyType>
                   <RDF:PropertyType ID="queryResultPage">
                       <RDFS:necessity RDF:HREF="http://www.w3.org/TR/WD-rdf-schema#OneOrMore"/>
                       <RDFS:range RDF:HREF="http://www.w3.org/FictionalSchemas/useful_types#WebPage"/>
                   </RDF:PropertyType>
               </RDFS:allowedPropertyType>
               <RDFS:allowedPropertyType>
                   <RDF:PropertyType ID="queryResultTitle">
                       <RDFS:necessity RDF:HREF="http://www.w3.org/TR/WD-rdf-schema#OneOrMore"/>
                       <RDFS:range RDF:HREF="http://www.w3.org/FictionalSchemas/useful_types#String"/>
                   </RDF:PropertyType>
               </RDFS:allowedPropertyType>
               <RDFS:allowedPropertyType>
                   <RDF:PropertyType ID="queryResultRating">
                       <RDFS:necessity RDF:HREF="http://www.w3.org/TR/WD-rdf-schema#ZeroOrMore"/>
                       <RDFS:range RDF:HREF="http://www.w3.org/FictionalSchemas/useful_types#FloatZeroToOne"/>
                   </RDF:PropertyType>
               </RDFS:allowedPropertyType>
            </RDFS:Class>
        </RDFS:range>
     </RDF:PropertyType>
   </RDFS:allowedPropertyType>
</RDFS:Class>
</RDF:RDF>


Appendix C: Open Issues

The following issues are currently under consideration by the RDF Schema working group, and will be covered in more detail in a future version of this document.

C.3. Alternatives for expressing cardinality

The number of distinct properties of a particular type that a resource has is defined by "Cardinality". There are a number of possible alternative mechanisms for expressing cardinality (e.g. a fixed, minimum, or maximum number, etc). While it is agreed that the expression of cardinality is necessary, the specifics of this expression are still being discussed. Currently, the RDF schema group is reviewing cardinality constraints that are expressed in both the Unified Modelling Language [UML] and the XML-Data note [XML-Data].

C.8. Versioning

The Resource Description Framework is intended to be flexible and easily extensible; this suggests that a great variety of schemas will be created and that new and improved versions of these schemas will be a common occurence on the Web. Since changing a schema risks breaking other RDF graphs which depend on that schema, this specification requires that a new URI is used whenever an RDF schema is changed. In effect, changing a schema creates a new one; new schemas should have their own URI to avoid ambiguity. Since an RDF Schema URI unambiguously identifies a single version of a schema, RDF processors (and Web caches) should be able to safely store copies of RDF schema graphs for an indefinite period.

The problems of RDF schema evolution share many characteristics with XML DTD version management and the general problem of Web resource versioning. Is is expected that a general approach to these issues will presented in a future version of this document, in co-ordination with other W3C activities. Future versions of this document may also offer RDF specific guidelines: for example, describing how a schema could document its relationship to preceding versions.

C.9. Thesauri and large schemas

Thesauri are a well known example of hierarchical systems for representing the relationships between concepts. The RDF Schema specification provides sufficient resources for creating machine readable representations of thesauri (and other faceted classification systems). Some practical issue for deploying these large schemas are yet to be resolved.

In particular: should it be possible to avoid requiring RDF aware user-agents to download the entire large schema across the network when dereferencing a schema URI? In particular: how, if it all, might a schema namespace URI be modified to obtain alternate forms or fragments of the schema? (one possible scenario being the use of the XML-Link [XML-Link] '|' fragment identifier).

C.11. What does a schema look like on the Web?

The RDF Schema group is currently discussing the actual representation of a schema. XML namespace mechanisms provide the ability to point to RDF Schemas. What exactly will they be pointing at? Is a RDF Schema a single document with both HTML, for human readability, and an embedded instance of RDF for machine processability? Are there multiple documents? Are there both human-readable and machine-processable portions of RDF that are handled through content negotiation?

C.12. Class Sealing

We would like to define a mechanism for 'sealing' an RDF Class, so that it becomes illegal to make certain RDF statements involving it. This is loosely analogous to the notion of 'final' classes in Java / OO programming. We might, for example, want to stop people creating subclasses of the class, or creating property types which have that class as their domain. The degree of sophistication required of the class sealing mechanism is as yet unclear: we might (for example) wish to consider the feasibility of using digital signatures in this context.

C.19. Property Value Inheritance

In order to represent the PICS generic concept, RDF Schemas need to be able to specify inheritance of property values.

C.21. Interactions with External Type Systems

The RDF Schema mechanism defines a basic type system. It was not developed to provide every imaginable capability. Instead, in the interests of simplicity and performance, it will be only as expressive as needed to meet the requirements of PICS. (Support for PICS generic capability, which we expect to be in the next public release of this document, will provide enough sophistication for most applications).

The RDF Schema mechanism will need to interact with many externally developed typing systems. There are two broad categories of such systems. The first are externally defined "primitive data types", such as IEEE floating point numbers, Integers, Boolean values, Dates and Times, etc. The second category are external "type systems", which provide features such as inheritance, type inferencing, etc.

At this time we have not even begun to consider the second category. Several factors make it difficult to decide on the appropriate interactions with the first category. RDF models are exchanged as XML document instances. The XML Working group has expressed an interest in working on the problem of data typing, to provide the ability to specify that element content should be interpreted as an integer, a date, a float, left as a string, etc. The interactions between data typing efforts in XML and RDF is currently being discussed by the W3 staff, so this document does not provide a specification for those interactions that is as firm as the specification for elements such as RDFS:Class, RDFS:subClassOf, etc.

However, it is the rough consensus of the RDF Schema WG that it would be useful to show that the current schema system can actually accommodate externally defined primitive data types. Therefore, figure 1, and the relevant portion of the text of the specification, was modified to give a provisional indication of how external types might be handled. The reader is advised that those portions of the specification are highly subject to change, even more so than the rest of this specification. All of those sections have been explicitly marked to refer to this open issue.

C.22. RDFS:String

The treatment of RDFS:String is still under discussion by the working group, and there is a known inconsistency in the definitions in Appendix A. The range of RDFS:range is RDFS:Class, RDFS:String is intended to be used as the value of RDFS:range properties, but RDFS:String is not a Class. This will be corrected, and the status of RDFS:String will be clarified, in a later version of this document.

C.23. Context-specific constraints

In the current draft, constraints on property types (range and necessity) apply across all uses of the property type. Some user communities have expressed an interest in the ability to further constrain a property type in the context a particular class. For example, instances of Animal may have the property biologicalParent. The range of biologicalParent is Animal, i.e., the values of biologicalParent properties are instances of Animal. If we could further constrain the range of a property type in the context of a particular Class, we could express a further constraint that the range of biologicalParent in the context of Person is Person, i.e., the value of biologicalParent properties for Person has to be a Person. Feedback on this issue is solicited.

C.24. Interactions between subclassing and constraints

We believe that there are important interactions between subclassing and at least some constraints, but we do not specify these interactions.


Appendix D: Dublin Core

The following represents an initial schema for the simple Dublin Core Element Set [DC].

This schema is provided as the foundation for the Dublin Core semantics. It is believed to be all that is needed to serve as the foundation for future, more elaborate definitions. Future extensions are likely to specify the structure of the values of the properties, which will involve defining classes, the property types that apply to those classes, and some constraints on the property values.




<?xml:namespace ns="http://www.w3.org/TR/WD-RDF-Syntax/" prefix="RDF"?>
<?xml:namespace ns="http://www.w3.org/TR/WD-RDF-Schema/" prefix="RDFS"?>

<!-- Declaration of the Dublin Core Element Schema Definition -->

<RDF:RDF>
<RDF:Description ID = "Title">
  <RDF:instanceOf RDF:href="http://www.w3.org/TR/WD-RDF-Syntax#PropertyType"/>
  <RDFS:necessity RDF:href="http://www.w3.org/TR/WD-RDF-Schema#ZeroOrMore"/>
  <RDFS:Comment>The name given to the resource, usually by the Creator
  or Publisher.</RDFS:Comment>
</RDF:Description>

<RDF:Description ID = "Creator">
  <RDF:instanceOf RDF:href="http://www.w3.org/TR/WD-RDF-Syntax#PropertyType"/>
  <RDFS:necessity RDF:href="http://www.w3.org/TR/WD-RDF-Schema#ZeroOrMore"/>
  <RDFS:Comment>The person or organization primarily responsible for
  creating the intellectual content of the resource. For example,
  authors in the case of written documents, artists, photographers, or
  illustrators in the case of visual resources.</RDFS:Comment>
</RDF:Description>

<RDF:Description ID = "Subject">
  <RDF:instanceOf RDF:href="http://www.w3.org/TR/WD-RDF-Syntax#PropertyType"/>
  <RDFS:necessity RDF:href="http://www.w3.org/TR/WD-RDF-Schema#ZeroOrMore"/>
  <RDFS:Comment>The topic of the resource. Typically, subject will be
  expressed as keywords or phrases that describe the subject or
  content of the resource. The use of controlled vocabularies and
  formal classification schemes is encouraged.</RDFS:Comment>
</RDF:Description>

<RDF:Description ID = "Description">
  <RDF:instanceOf RDF:href="http://www.w3.org/TR/WD-RDF-Syntax#PropertyType"/>
  <RDFS:necessity RDF:href="http://www.w3.org/TR/WD-RDF-Schema#ZeroOrMore"/>
  <RDFS:Comment> A textual description of the content of the resource,
  including abstracts in the case of document-like objects or content
  descriptions in the case of visual resources.</RDFS:Comment>
</RDF:Description>

<RDF:Description ID = "Publisher">
  <RDF:instanceOf RDF:href="http://www.w3.org/TR/WD-RDF-Syntax#PropertyType"/>
  <RDFS:necessity RDF:href="http://www.w3.org/TR/WD-RDF-Schema#ZeroOrMore"/>
  <RDFS:Comment>The entity responsible for making the resource
  available in its present form, such as a publishing house, a
  university department, or a corporate entity.</RDFS:Comment>
</RDF:Description>

<RDF:Description ID = "Contributor">
  <RDF:instanceOf RDF:href="http://www.w3.org/TR/WD-RDF-Syntax#PropertyType"/>
  <RDFS:necessity RDF:href="http://www.w3.org/TR/WD-RDF-Schema#ZeroOrMore"/>
  <RDFS:Comment>A person or organization not specified in a Creator
  element who has made significant intellectual contributions to the
  resource but whose contribution is secondary to any person or
  organization specified in a Creator element (for example, editor,
  transcriber, and illustrator).</RDFS:Comment>
</RDF:Description>

<RDF:Description ID = "Date">
  <RDF:instanceOf RDF:href="http://www.w3.org/TR/WD-RDF-Syntax#PropertyType"/>
  <RDFS:necessity RDF:href="http://www.w3.org/TR/WD-RDF-Schema#ZeroOrMore"/>
  <RDFS:Comment>A date associated with the creation or availability of
  the resource. Such a date is not to be confused with one belonging
  in the Coverage element, which would be associated with the resource
  only insofar as the intellectual content is somehow about that
  date. Recommended best practice is defined in a profile of ISO 8601
  [Date and Time Formats (based on ISO8601), W3C Technical Note,
  http://www.w3.org/TR/NOTE-datetime] that includes (among others)
  dates of the forms YYYY and YYYY-MM-DD. In this scheme, for example,
  the date 1994-11-05 corresponds to November 5, 1994.</RDFS:Comment>
</RDF:Description>

<RDF:Description ID = "Type">
  <RDF:instanceOf RDF:href="http://www.w3.org/TR/WD-RDF-Syntax#PropertyType"/>
  <RDFS:necessity RDF:href="http://www.w3.org/TR/WD-RDF-Schema#ZeroOrMore"/>
  <RDFS:Comment>The category of the resource, such as home page,
  novel, poem, working paper, technical report, essay, dictionary. For
  the sake of interoperability, Type should be selected from an
  enumerated list that is currently under development in the workshop
  series.</RDFS:Comment>
</RDF:Description>

<RDF:Description ID = "Format">
  <RDF:instanceOf RDF:href="http://www.w3.org/TR/WD-RDF-Syntax#PropertyType"/>
  <RDFS:necessity RDF:href="http://www.w3.org/TR/WD-RDF-Schema#ZeroOrMore"/>
  <RDFS:Comment>The data format of the resource, used to identify the
  software and possibly hardware that might be needed to display or
  operate the resource. For the sake of interoperability, Format
  should be selected from an enumerated list that is currently under
  development in the workshop series.</RDFS:Comment>
</RDF:Description>


<RDF:Description ID = "Identifier">
  <RDF:instanceOf RDF:href="http://www.w3.org/TR/WD-RDF-Syntax#PropertyType"/>
  <RDFS:necessity RDF:href="http://www.w3.org/TR/WD-RDF-Schema#ZeroOrMore"/>
  <RDFS:Comment>A string or number used to uniquely identify the
  resource. Examples for networked resources include URLs and URNs
  (when implemented). Other globally-unique identifiers, such as
  International Standard Book Numbers (ISBN) or other formal names are
  also candidates for this element.</RDFS:Comment>
</RDF:Description>

<RDF:Description ID = "Source">
  <RDF:instanceOf RDF:href="http://www.w3.org/TR/WD-RDF-Syntax#PropertyType"/>
  <RDFS:necessity RDF:href="http://www.w3.org/TR/WD-RDF-Schema#ZeroOrMore"/>
  <RDFS:Comment>Information about a second resource from which the
  present resource is derived. While it is generally recommended that
  elements contain information about the present resource only, this
  element may contain a date, creator, format, identifier, or other
  metadata for the second resource when it is considered important for
  discovery of the present resource; recommended best practice is to
  use the Relation element instead.  For example, it is possible to
  use a Source date of 1603 in a description of a 1996 film adaptation
  of a Shakespearean play, but it is preferred instead to use Relation
  "IsBasedOn" with a reference to a separate resource whose
  description contains a Date of 1603. Source is not applicable if the
  present resource is in its original form.</RDFS:Comment>
</RDF:Description>

<RDF:Description ID = "Language">
  <RDF:instanceOf RDF:href="http://www.w3.org/TR/WD-RDF-Syntax#PropertyType"/>
  <RDFS:necessity RDF:href="http://www.w3.org/TR/WD-RDF-Schema#ZeroOrMore"/>
  <RDFS:Comment>The language of the intellectual content of the
  resource. Where practical, the content of this field should coincide
  with RFC 1766 [Tags for the Identification of Languages,
  http://ds.internic.net/rfc/rfc1766.txt ]; examples include en, de,
  es, fi, fr, ja, th, and zh.</RDFS:Comment>
</RDF:Description>

<RDF:Description ID = "Relation">
  <RDF:instanceOf RDF:href="http://www.w3.org/TR/WD-RDF-Syntax#PropertyType"/>
  <RDFS:necessity RDF:href="http://www.w3.org/TR/WD-RDF-Schema#ZeroOrMore"/>
  <RDFS:Comment>An identifier of a second resource and its
  relationship to the present resource. This element permits links
  between related resources and resource descriptions to be
  indicated. Examples include an edition of a work (IsVersionOf), a
  translation of a work (IsBasedOn), a chapter of a book (IsPartOf),
  and a mechanical transformation of a dataset into an image
  (IsFormatOf). For the sake of interoperability, relationships should
  be selected from an enumerated list that is currently under
  development in the workshop series.</RDFS:Comment>
</RDF:Description>

<RDF:Description ID = "Coverage">
  <RDF:instanceOf RDF:href="http://www.w3.org/TR/WD-RDF-Syntax#PropertyType"/>
  <RDFS:necessity RDF:href="http://www.w3.org/TR/WD-RDF-Schema#ZeroOrMore"/>
  <RDFS:Comment>The spatial or temporal characteristics of the
  intellectual content of the resource. Spatial coverage refers to a
  physical region (e.g., celestial sector); use coordinates (e.g.,
  longitude and latitude) or place names that are from a controlled
  list or are fully spelled out. Temporal coverage refers to what the
  resource is about rather than when it was created or made available
  (the latter belonging in the Date element); use the same date/time
  format (often a range) [Date and Time Formats (based on ISO8601),
  W3C Technical Note, http://www.w3.org/TR/NOTE-datetime] as
  recommended for the Date element or time periods that are from a
  controlled list or are fully spelled out.</RDFS:Comment>
</RDF:Description>

<RDF:Description ID = "Rights">
  <RDF:instanceOf RDF:href="http://www.w3.org/TR/WD-RDF-Syntax#PropertyType"/>
  <RDFS:necessity RDF:href="http://www.w3.org/TR/WD-RDF-Schema#ZeroOrMore"/>
  <RDFS:Comment>A rights management statement, an identifier that
  links to a rights management statement, or an identifier that links
  to a service providing information about rights management for the
  resource.</RDFS:Comment>
</RDF:Description>
</RDF:RDF>

Appendix E: References

[RDFMS]
Resource Description Framework (RDF) Model and Syntax; http://www.w3.org/TR/WD-rdf-syntax/
[NIAM]
G. M. Nijssen and Terry Halpin, Conceptual Schema and Relational Database Design, (Prentice Hall, Sydney:1989)
[CycL]
CycL: The CYC Representation Language; http://www.cyc.com/tech.html#cycl
[KIF]
Knowledge Interchange Format (KIF); http://logic.stanford.edu/kif/kif.html
[PICS]
Platform for Internet Content Selection; http://www.w3.org/PICS/
[DC]
The Dublin Core initiative; http://purl.oclc.org/metadata/dublin_core
[UML]
Unified Modelling Language (UML); http://www.rational.com/uml/resources.html
[XML-Data]
XML Data; http://www.w3.org/Submission/1998/01/
[XML-Link]
XML Linking Language (XLink) http://www.w3.org/TR/WD-xml-link