<?xml version="1.0"?>

<!DOCTYPE rdf:RDF [
  <!ENTITY xml "http://www.w3.org/XML/1998/namespace" >
  <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
  <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
  <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
  <!ENTITY owl "http://www.w3.org/2002/07/owl#" >
  <!ENTITY ds6w "http://www.3ds.com/vocabularies/ds6w/" >
]>

<!-- Declare the namespaces of the vocabularies to reuse, including the ds6w vocabulary. -->
<rdf:RDF  
  xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
  xmlns:xml="http://www.w3.org/XML/1998/namespace"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
  xmlns:owl="http://www.w3.org/2002/07/owl#"
  xmlns:ds6w="http://www.3ds.com/vocabularies/ds6w/"    
  xml:base="http://www.myCompany.com/vocabularies/exe/"><!-- Declare the base URL of the terms defined in this vocabulary. --> 
  
  <!-- Define the ontology representing this vocabulary. -->
  <owl:Ontology rdf:about="http://www.myCompany.com/vocabularies/exe/">
    <rdfs:label xml:lang="en">Vehicle Ontology</rdfs:label>
    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string">This ontology aims at providing a sample for creating RDF vocabulary.</rdfs:comment>
    <owl:versionInfo>V1.0</owl:versionInfo>
  </owl:Ontology>

  <!-- Define a named class. This name must begin with an upper-case character. Use camel case for composed nouns. -->
  <!-- Warning: This is not interpreted in 6WTags. -->
  <owl:Class rdf:about="Vehicle">
    <rdfs:label xml:lang="en">Vehicle</rdfs:label>
    <rdfs:label xml:lang="fr">Vehicule</rdfs:label>
    <rdfs:comment rdf:datatype="&xsd;string">To represent all vehicles.</rdfs:comment>
  </owl:Class>
  
  <!-- Define a named class that a is subclass of another. -->
  <!-- Warning: This is not interpreted in 6WTags. -->
  <owl:Class rdf:about="Car">
    <rdfs:label xml:lang="en">Car</rdfs:label>
    <rdfs:label xml:lang="fr">Voiture</rdfs:label>
    <rdfs:comment rdf:datatype="&xsd;string">To represent cars.</rdfs:comment>
    <rdfs:subClassOf rdf:resource="Vehicle"/>
  </owl:Class>
  
  <!-- Define a named class and a limited set of individuals. -->
  <!-- Warning: This is not interpreted in 6WTags. -->
  <owl:Class rdf:about="Geo">
    <rdfs:label xml:lang="en">Geo</rdfs:label>
    <rdfs:label xml:lang="fr">Geo</rdfs:label>
    <rdfs:comment rdf:datatype="&xsd;string">To represent geo areas for selling vehicles.</rdfs:comment>
    <owl:oneOf rdf:parseType="Collection">
      <owl:Thing rdf:about="#NAM"/>
      <owl:Thing rdf:about="#EURONORTH"/>
      <owl:Thing rdf:about="#EUROWEST"/>
      <owl:Thing rdf:about="#EUROMED"/>
      <owl:Thing rdf:about="#CHINA"/>
      <owl:Thing rdf:about="#INDIA"/>
    </owl:oneOf>
  </owl:Class>

  <!-- Define a data property that derives from a "ds6w:when" property defined in the ds6w vocabulary. This name must begin with a lowercase character. -->
  <!-- Use a noun for DatatypeProperty. -->
  <owl:DatatypeProperty rdf:about="manufacturingDate"> 
    <rdfs:label xml:lang="en">Manufacturing Date</rdfs:label>
    <rdfs:label xml:lang="fr">Date de Fabrication</rdfs:label>
    <rdfs:subPropertyOf rdf:resource="&ds6w;when"/>
    <rdfs:domain rdf:resource="Vehicle"/>   <!-- "domain" is not interpreted in 6WTags. -->
    <rdfs:range rdf:resource="&xsd;date"/>  <!-- "range" is interpreted with simple types only. -->
  </owl:DatatypeProperty> 

  <!-- Define a data property that derives from a "ds6w:what" property defined in the ds6w vocabulary. -->  
  <!-- It also defines a range with enumerated literals. -->
  <owl:DatatypeProperty rdf:about="energy"> 
    <rdfs:label xml:lang="en">Energy</rdfs:label>
    <rdfs:label xml:lang="fr">Energie</rdfs:label>
    <rdfs:subPropertyOf rdf:resource="&ds6w;what"/>
    <rdfs:domain rdf:resource="Vehicle"/>
    <rdfs:range>  
      <owl:DataRange>
        <owl:oneOf>
          <rdf:List>
            <rdf:first rdf:datatype="&xsd;string" xml:lang="en">Petrol</rdf:first>
            <rdf:rest>
              <rdf:List>
                <rdf:first rdf:datatype="&xsd;string" xml:lang="en">Gasoil</rdf:first>
                <rdf:rest>
                  <rdf:List>
                    <rdf:first rdf:datatype="&xsd;string" xml:lang="en">Electrical</rdf:first>
                    <rdf:rest>
                      <rdf:List>
                        <rdf:first rdf:datatype="&xsd;string" xml:lang="en">Hybrid</rdf:first>
                        <rdf:rest rdf:resource="&rdf;nil" />
                      </rdf:List>
                    </rdf:rest>
                  </rdf:List>
                </rdf:rest>
              </rdf:List>
            </rdf:rest>
          </rdf:List>
        </owl:oneOf>
      </owl:DataRange>
    </rdfs:range>
  </owl:DatatypeProperty>

  <!-- Define an object property that derives from a "ds6w:where" property defined in the ds6w vocabulary. -->
  <!-- Use a verb for DatatypeProperty. -->
  <owl:DatatypeProperty rdf:about="isMarketedIn">
    <rdfs:label xml:lang="en">Is marketed in</rdfs:label>
    <rdfs:label xml:lang="fr">Est commercialise à </rdfs:label>
    <rdfs:subPropertyOf rdf:resource="&ds6w;where"/>
    <rdfs:domain rdf:resource="Vehicule"/>
    <rdfs:range rdf:resource="Geo"/>
  </owl:DatatypeProperty>

</rdf:RDF>