<?xml version="1.0"?>

<!--

Examples of Modular Schemas depicting the Relationships between
Schemas, Namespaces, and Vocabularies:

This is essentially how the vocabularies are organized and managed
at Nokia, which serve as the basis for management and delivery of
approx. 5 million pages of product documentation in multiple
languages as well as the navigation and search facilities for
Nokia customer portals such as Club Nokia and Nokia.com. 

The material presented here is public, but copyrighted:

Copyright (C) 2002 Nokia Inc.

(portions of the core RDF schemas are public, but new stuff isn't
by default so some of the recent evolution is still confidential;
though I hope to free it up soon so folks can review it and offer
any comments, etc.)

-->

<!DOCTYPE rdf:RDF [
  <!ENTITY rdf  "http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#">
  <!ENTITY dc   "http://purl.org/dc/elements/1.1/">
  <!ENTITY meta "voc://abc.com/foo/meta/">
  <!ENTITY foo  "voc://abc.com/foo/">
  <!ENTITY xsd  "xsd:">
  <!ENTITY auml "&auml;">
  <!ENTITY plx  "voc://plx.abc.com/foo/">
]>

<rdf:RDF
   xmlns:rdf  ="&rdf;"
   xmlns:rdfs ="&rdfs;"
   xmlns:dc   ="&dc;"
   xmlns:foo  ="&foo;"
   xmlns:meta ="&meta;"
   xmlns:plx  ="&plx;"
>

<!-- Notes:

1. The URIs denoting the schemas in these examples are not equivalent
   to the XML namespaces used to serialize vocabulary terms
   nor do they even belong to the same URI scheme as the term
   URIs.

   "hrn://abc.com/foo-general" != "voc://abc.com/foo/"

2. A term belongs to one or more functional vocabularies, and
   the complete definition of a given term is split among a
   set of mulitple RDF schemas in the interest of efficient
   modular design and management of ontological definitions.

   Expression of ownership of the term is left entirely to 
   the mechanisms provided by the URI scheme employed for
   the term URI, or to other RDF-external social practices.

   e.g.

   "voc://abc.com/foo/status"
      rdfs:isDefinedBy "hrn://abc.com/foo-general"
      rdfs:isDefinedBy "hrn://abc.com/foo-en"
      rdfs:isDefinedBy "hrn://abc.com/foo-fi"
      rdfs:isDefinedBy "hrn://abc.com/foo-dc"
      rdfs:isDefinedBy "hrn://plx.abc.com/local/foo-extensions"

   (owner of the term "voc://abc.com/foo/status" is the owner of
    the domain name 'abc.com' per the semantics of the voc: URI scheme)

3. A given envionment will select which schemas are to be
   loaded into the knowledge base, according to the specific
   needs of the applications in question.

4. The identity of a given schema is independent of its location
   (point of web accessibility). A particular vocabulary may have
   its terms defined by more than one schema instance.

   "hrn://abc.com/foo-general" -> "http://www.abc.com/schemas/foo-general.rdf"

5. The hrn: URI scheme is a URN scheme which employs DNS
   naming to differentiate between defining authorities
   (or UUIDs) which avoids the need for any centralized
   issuing authority as is the case of urn: subschemes.

   c.f. http://ietf.org/internet-drafts/draft-pstickler-hrn-01.txt

6. The voc: URI scheme provides for denotation of non web
   accessible resources, typically abstract terms and codes
   used in vocabularies and ontologies.

   c.f. http://ietf.org/internet-drafts/draft-pstickler-voc-01.txt

7. The 'auth:' URI scheme provides a means for defining hierarchical
   identifiers for authorities, to which ownership, control, and/or
   source of knowledge and information is ascribed.

   c.f. http://ietf.org/internet-drafts/draft-pstickler-auth-01.txt

8. A given vocabulary may select any subset of terms from any other
   vocabulary. There is no requirement that if it uses one term, it
   must use all terms from the same vocabulary. The issue of ownership
   is disjunct from the re-use of terms by a functional vocabulary.

9. The explicit definition of vocabularies is used in numerous ways,
   such as for driving generic tools that generate relational database
   schemas, or GUIs, as well as for tools specific filtering of
   statements (where the tool specifies the vocabulary of interest
   and all other statements are ignored or discarded). It is also used
   for specifying manditory vs. optional terms for various tools and
   functions.

-->

<!-- ============================================================ -->
<!-- Meta-Machinery used in examples                              -->
<!-- ============================================================ -->

<rdfs:Class rdf:about="&meta;Vocabulary">
   <rdfs:comment>
      A collection of terms and/or sub-vocabularies.
   </rdfs:comment>
</rdfs:Class>

<rdf:Property rdf:about="&meta;vocabulary">
   <rdfs:range rdf:resource="&meta;Vocabulary"/>
</rdf:Property>

<rdfs:Class rdf:about="&meta;Term">
   <rdfs:comment>
      A vocabulary term.
   </rdfs:comment>
</rdfs:Class>

<rdf:Property rdf:about="&meta;term">
   <rdfs:range rdf:resource="&meta;Term"/>
</rdf:Property>

<rdfs:Class rdf:about="&meta;Schema">
   <rdfs:comment>
      An RDF schema.
   </rdfs:comment>
</rdfs:Class>

<!-- ============================================================ -->
<!-- Contents of "hrn://abc.com/foo"                              -->
<!-- ============================================================ -->

<meta:Schema rdf:about="hrn://abc.com/foo">
   <rdfs:comment>
      Top level (root) schema defining the vocabulary.
   </rdfs:comment>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo"/>
   <foo:creator rdf:resource="voc://abc.com/user/8382227369"/>
   <foo:authority rdf:resource="auth://abc.com/im/sdl/km;2002"/>
</meta:Schema>

<meta:Vocabulary rdf:about="voc://abc.com/foo">
   <meta:vocabulary rdf:resource="voc://abc.com/foo-general"/>
   <meta:vocabulary rdf:resource="voc://abc.com/foo-security"/>
   <meta:vocabulary rdf:resource="voc://abc.com/foo-navigation"/>
   <meta:vocabulary rdf:resource="voc://abc.com/foo-rights"/>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo"/>
</meta:Vocabulary>

<!-- ============================================================ -->
<!-- Contents of "hrn://abc.com/foo-general"                      -->
<!-- ============================================================ -->

<meta:Schema rdf:about="hrn://abc.com/foo-general">
   <rdfs:comment>
      Schema defining core of Foo vocabulary.
   </rdfs:comment>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-general"/>
   <foo:creator rdf:resource="voc://abc.com/user/8382227369"/>
   <foo:authority rdf:resource="auth://abc.com/im/sdl/km;2002"/>
</meta:Schema>

<meta:Vocabulary rdf:about="voc://abc.com/foo-general">
   <meta:term rdf:resource="voc://abc.com/foo/status"/>
   <meta:term rdf:resource="voc://abc.com/foo/Status/defined"/>
   <meta:term rdf:resource="voc://abc.com/foo/Status/draft"/>
   <meta:term rdf:resource="voc://abc.com/foo/Status/draft-approved"/>
   <meta:term rdf:resource="voc://abc.com/foo/Status/approved"/>
   <meta:term rdf:resource="voc://abc.com/foo/Status/published"/>
   <meta:term rdf:resource="voc://abc.com/foo/Status/retired"/>
   <meta:term rdf:resource="voc://abc.com/foo/modified"/>
   <meta:term rdf:resource="voc://abc.com/foo/Date"/>
   <meta:term rdf:resource="voc://abc.com/foo/location"/>
   <meta:term rdf:resource="voc://abc.com/foo/creator"/>
   <meta:term rdf:resource="voc://abc.com/foo/authority"/>
   <meta:term rdf:resource="voc://abc.com/foo/count"/>
   <meta:term rdf:resource="voc://abc.com/foo/rank"/>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-general"/>
</meta:Vocabulary>

<rdf:Property rdf:about="voc://abc.com/foo/status">
   <rdfs:comment>
      This property defines the creation status of a electronically
      encoded media resource.
   </rdfs:comment>
   <rdfs:domain rdf:resource="voc://abc/foo/MediaResource"/>
   <rdfs:range  rdf:resource="voc://abc/foo/Status"/>
   <foo:count>1</foo:count>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-general"/>
</rdf:Property>

<foo:Status rdf:about="voc://abc.com/foo/Status/defined">
   <foo:rank>1</foo:rank>
   <rdfs:comment>
      The media resource has been defined.
   </rdfs:comment>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-general"/>
</foo:Status>

<foo:Status rdf:about="voc://abc.com/foo/Status/draft">
   <foo:rank>2</foo:rank>
   <rdfs:comment>
      The media resource is partially complete.
   </rdfs:comment>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-general"/>
</foo:Status>

<foo:Status rdf:about="voc://abc.com/foo/Status/draft-approved">
   <foo:rank>3</foo:rank>
   <rdfs:comment>
      The media resource is complete.
   </rdfs:comment>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-general"/>
</foo:Status>

<foo:Status rdf:about="voc://abc.com/foo/Status/approved">
   <foo:rank>4</foo:rank>
   <rdfs:comment>
      The media resource is approved as correct and valid.
   </rdfs:comment>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-general"/>
</foo:Status>

<foo:Status rdf:about="voc://abc.com/foo/Status/published">
   <foo:rank>5</foo:rank>
   <rdfs:comment>
      The media resource is in use.
   </rdfs:comment>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-general"/>
</foo:Status>

<foo:Status rdf:about="voc://abc.com/foo/Status/retired">
   <foo:rank>6</foo:rank>
   <rdfs:comment>
      The media resource is no longer in use.
   </rdfs:comment>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-general"/>
</foo:Status>

<rdf:Property rdf:about="voc://abc.com/foo/modified">
   <rdfs:domain rdf:resource="voc://abc/foo/MediaResource"/>
   <rdfs:range  rdf:resource="voc://abc/foo/Date"/>
   <foo:count>1</foo:count>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-general"/>
</rdf:Property>

<rdfs:Datatype rdf:about="voc://abc.com/foo/Date">
   <rdf:comment>
      An ISO 8601 encoded date.
   </rdf:comment>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-general"/>
</rdfs:Datatype>

<rdf:Property rdf:about="voc://abc.com/foo/location">
   <rdfs:comment>
      A URL specifying a point of web access for a resource.
   </rdfs:comment>
</rdf:Property>

<rdf:Property rdf:about="voc://abc.com/foo/count">
   <rdfs:domain rdf:resource="&rdf;Property"/>
   <rdfs:range rdf:resource="&xsd;positiveInteger"/>
   <rdfs:comment>
      The precise cardinality of a property.
   </rdfs:comment>
</rdf:Property>

<rdf:Property rdf:about="voc://abc.com/foo/rank">
   <rdfs:range rdf:resource="&xsd;positiveInteger"/>
   <rdfs:comment>
      The ordered ranking of an enumerated property value.
   </rdfs:comment>
</rdf:Property>

<rdf:Property rdf:about="voc://abc.com/foo/authority">
   <rdfs:comment>
      The authority responsible for the definition and/or control of
      a resource.
   </rdfs:comment>
</rdf:Property>

<!-- ============================================================ -->
<!-- Contents of "hrn://abc.com/foo-en"                           -->
<!-- ============================================================ -->

<meta:Schema rdf:about="hrn://abc.com/foo-en">
   <rdfs:comment>
      Schema defining English labels.
   </rdfs:comment>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-en"/>
   <foo:creator rdf:resource="voc://abc.com/user/8382227369"/>
   <foo:authority rdf:resource="auth://abc.com/im/sdl/km;2002"/>
</meta:Schema>

<rdf:Property rdf:about="voc://abc.com/foo/status">
   <rdfs:label xml:lang="en">Status</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-en"/>
</rdf:Property>

<rdf:Description rdf:about="voc://abc.com/foo/Status/defined">
   <rdfs:label xml:lang="en">Defined</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-en"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/Status/draft">
   <rdfs:label xml:lang="en">Draft</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-en"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/Status/draft-approved">
   <rdfs:label xml:lang="en">Approved Draft</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-en"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/Status/approved">
   <rdfs:label xml:lang="en">Approved</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-en"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/Status/published">
   <rdfs:label xml:lang="en">Published</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-en"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/Status/retired">
   <rdfs:label xml:lang="en">Retired</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-en"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/modified">
   <rdfs:label xml:lang="en">Modified</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-en"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/Date">
   <rdfs:label xml:lang="en">Date</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-en"/>
</rdf:Description>

<!-- ============================================================ -->
<!-- Contents of "hrn://abc.com/foo-fi"                           -->
<!-- ============================================================ -->

<meta:Schema rdf:about="hrn://abc.com/foo-fi">
   <rdfs:comment>
      Schema defining Finnish labels.
   </rdfs:comment>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-fi"/>
   <foo:creator rdf:resource="voc://abc.com/user/8382227369"/>
   <foo:authority rdf:resource="auth://abc.com/im/sdl/km;2002"/>
</meta:Schema>

<rdf:Description rdf:about="voc://abc.com/foo/status">
   <rdfs:label xml:lang="fi">Tilanne</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-fi"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/Status/defined">
   <rdfs:label xml:lang="fi">Luotu</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-fi"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/Status/draft">
   <rdfs:label xml:lang="fi">Ei Valmis</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-fi"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/Status/draft-approved">
   <rdfs:label xml:lang="fi">Valmis</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-fi"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/Status/approved">
   <rdfs:label xml:lang="fi">Hyv&amp;:auml;ksetty</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-fi"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/Status/published">
   <rdfs:label xml:lang="fi">Julistunut</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-fi"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/Status/retired">
   <rdfs:label xml:lang="fi">Poistettu</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-fi"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/modified">
   <rdfs:label xml:lang="fi">Muutunut</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-fi"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/Date">
   <rdfs:label xml:lang="fi">Paiva</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-fi"/>
</rdf:Description>

<!-- ============================================================ -->
<!-- Contents of "hrn://abc.com/foo-dc"                           -->
<!-- ============================================================ -->

<meta:Schema rdf:about="hrn://abc.com/foo-dc">
   <rdfs:comment>
      Schema relating core Foo vocabulary to Dublin Core.
   </rdfs:comment>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-dc"/>
   <foo:creator rdf:resource="voc://abc.com/user/8382227369"/>
   <foo:authority rdf:resource="auth://abc.com/im/sdl/km;2002"/>
</meta:Schema>

<rdf:Description rdf:about="voc://abc.com/foo/creator">
   <rdfs:subPropertyOf rdf:resource="&dc;creator"/>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-dc"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/modified">
   <rdfs:subPropertyOf rdf:resource="&dc;date"/>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-dc"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/authority">
   <rdfs:subPropertyOf rdf:resource="&dc;publisher"/>
   <rdfs:isDefinedBy rdf:resource="hrn://abc.com/foo-dc"/>
</rdf:Description>

<!-- ============================================================ -->
<!-- Contents of "hrn://plx.abc.com/local/foo-extensions"         -->
<!-- ============================================================ -->

<meta:Schema rdf:about="hrn://plx.abc.com/local/foo-extensions">
   <rdfs:comment>
      Schema defining Product Line X specific extensions, restrictions
      and labels.
   </rdfs:comment>
   <rdfs:isDefinedBy rdf:resource="hrn://plx.abc.com/local/foo-extensions"/>
   <foo:creator rdf:resource="voc://abc.com/user/8382227369"/>
   <foo:authority rdf:resource="auth://abc.com/im/sdl/km;2002"/>
</meta:Schema>

<meta:Vocabulary rdf:about="voc://plx.abc.com/foo">
   <meta:vocabulary rdf:resource="voc://abc.com/foo"/>
   <meta:term rdf:resource="voc://plx.abc.com/foo/ModernDate"/>
   <meta:term rdf:resource="voc://plx.abc.com/foo/widgetID"/>
   <rdfs:isDefinedBy rdf:resource="hrn://plx.abc.com/local/foo-extensions"/>
</meta:Vocabulary>

<!-- in product line X, only two status values are allowed  -->

<rdfs:Class rdf:about="voc://plx.abc.com/foo/Status">
   <rdfs:subClassOf rdf:resource="voc://abc.com/foo/Status"/>
   <rdfs:isDefinedBy rdf:resource="hrn://plx.abc.com/local/foo-extensions"/>
</rdfs:Class>

<rdf:Description rdf:about="voc://abc.com/foo/status">
   <rdfs:range rdf:resource="voc://plx.abc.com/foo/Status"/>
   <rdfs:isDefinedBy rdf:resource="hrn://plx.abc.com/local/foo-extensions"/>
</rdf:Description>

<plx:Status rdf:about="voc://abc.com/foo/Status/draft">
   <rdfs:isDefinedBy rdf:resource="hrn://plx.abc.com/local/foo-extensions"/>
</plx:Status>

<plx:Status rdf:about="voc://abc.com/foo/Status/approved">
   <rdfs:isDefinedBy rdf:resource="hrn://plx.abc.com/local/foo-extensions"/>
</plx:Status>

<!-- In the Product Line X context, dates must be in this millenium  -->

<rdf:Description rdf:about="voc://abc.com/foo/modified">
   <rdfs:range rdf:resource="voc://plx.abc.com/foo/ModernDate"/>
   <rdfs:isDefinedBy rdf:resource="hrn://plx.abc.com/local/foo-extensions"/>
</rdf:Description>

<rdfs:Datatype rdf:about="voc://plx.abc.com/foo/ModernDate">
   <rdfs:subClassOf rdf:resource="voc://abc.com/foo/Date"/>
   <rdf:comment>
      An ISO 8601 encoded date equal to or later than "2000-01-01".
   </rdf:comment>
   <rdfs:isDefinedBy rdf:resource="hrn://plx.abc.com/local/foo-extensions"/>
</rdfs:Datatype>

<!-- Product Line X defines its own (annotated) English labels -->

<rdf:Description rdf:about="voc://abc.com/foo/status">
   <rdfs:label xml:lang="en">Creation Status</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://plx.abc.com/local/foo-extensions"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/Status/defined">
   <rdfs:label xml:lang="en">Defined (Created)</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://plx.abc.com/local/foo-extensions"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/Status/draft">
   <rdfs:label xml:lang="en">Draft (Incomplete)</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://plx.abc.com/local/foo-extensions"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/Status/draft-approved">
   <rdfs:label xml:lang="en">Approved Draft (Complete)</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://plx.abc.com/local/foo-extensions"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/Status/approved">
   <rdfs:label xml:lang="en">Approved (Valid)</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://plx.abc.com/local/foo-extensions"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/Status/published">
   <rdfs:label xml:lang="en">Published (In Force)</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://plx.abc.com/local/foo-extensions"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/Status/retired">
   <rdfs:label xml:lang="en">Retired (Not in Force)</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://plx.abc.com/local/foo-extensions"/>
</rdf:Description>

<rdf:Description rdf:about="voc://abc.com/foo/modified">
   <rdfs:label xml:lang="en">Date Modified</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://plx.abc.com/local/foo-extensions"/>
</rdf:Description>

<rdf:Description rdf:about="voc://plx.abc.com/foo/ModernDate">
   <rdfs:label xml:lang="en">Modern Date (>= 2000-01-01)</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://plx.abc.com/local/foo-extensions"/>
</rdf:Description>

<!-- product line X defines a few extra properties  -->

<rdf:Property rdf:about="voc://plx.abc.com/foo/widgetID">
   <rdfs:label xml:lang="en">Widget Identifier</rdfs:label>
   <rdfs:isDefinedBy rdf:resource="hrn://plx.abc.com/local/foo-extensions"/>
</rdf:Property>

<!-- ============================================================ -->
<!-- Contents of "hrn://abc.com/foo-general"                      -->
<!-- ============================================================ -->

<rdf:Description rdf:about="hrn://abc.com/foo-general">
   <foo:location rdf:resource="http://www.abc.com/schemas/foo.rdf"/>
</rdf:Description>

<rdf:Description rdf:about="hrn://abc.com/foo-en">
   <foo:location rdf:resource="http://www.abc.com/schemas/foo_en.rdf"/>
</rdf:Description>

<rdf:Description rdf:about="hrn://abc.com/foo-fi">
   <foo:location rdf:resource="http://www.abc.com/schemas/foo_fi.rdf"/>
</rdf:Description>

<rdf:Description rdf:about="hrn://abc.com/foo-dc">
   <foo:location rdf:resource="http://www.abc.com/schemas/foo_dc.rdf"/>
</rdf:Description>

<rdf:Description rdf:about="hrn://plx.abc.com/local/foo-extensions">
   <foo:location rdf:resource="http://plx.abc.com/cm/local/foo.rdf"/>
</rdf:Description>

</rdf:RDF>

