DAML+OIL Example (daml+oil-ex.daml)
<rdf:RDF
xmlns:rdf ="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:daml="http://www.daml.org/2001/03/daml+oil#"
xmlns:xsd ="http://www.w3.org/2000/10/XMLSchema#"
xmlns:dex ="http://www.daml.org/2001/03/daml+oil-ex#"
xmlns:exd ="http://www.daml.org/2001/03/daml+oil-ex-dt#"
xmlns ="http://www.daml.org/2001/03/daml+oil-ex#"
>
<daml:Ontology rdf:about="">
<daml:versionInfo>$Id: daml+oil-ex.daml,v 1.9 2001/05/03 16:38:38 mdean Exp $</daml:versionInfo>
<daml:imports rdf:resource="http://www.daml.org/2001/03/daml+oil"/>
</daml:Ontology>
<daml:Class rdf:ID="Animal">
<rdfs:label>Animal</rdfs:label>
</daml:Class>
<daml:Class rdf:ID="Male">
<rdfs:subClassOf rdf:resource="#Animal"/>
</daml:Class>
<daml:Class rdf:ID="Female">
<rdfs:subClassOf rdf:resource="#Animal"/>
<daml:disjointWith rdf:resource="#Male"/>
</daml:Class>
<daml:Class rdf:ID="Man">
<rdfs:subClassOf rdf:resource="#Person"/>
<rdfs:subClassOf rdf:resource="#Male"/>
</daml:Class>
<daml:Class rdf:ID="Woman">
<rdfs:subClassOf rdf:resource="#Person"/>
<rdfs:subClassOf rdf:resource="#Female"/>
</daml:Class>
<daml:ObjectProperty rdf:ID="hasParent">
<rdfs:domain rdf:resource="#Animal"/>
<rdfs:range rdf:resource="#Animal"/>
</daml:ObjectProperty>
<daml:ObjectProperty rdf:ID="hasFather">
<rdfs:subPropertyOf rdf:resource="#hasParent"/>
<rdfs:range rdf:resource="#Male"/>
</daml:ObjectProperty>
<daml:DatatypeProperty rdf:ID="shoesize">
<rdf:type rdf:resource="http://www.daml.org/2001/03/daml+oil#UniqueProperty"/>
<rdfs:range rdf:resource="http://www.w3.org/2000/10/XMLSchema#decimal"/>
</daml:DatatypeProperty>
<daml:DatatypeProperty rdf:ID="age">
<rdf:type rdf:resource="http://www.daml.org/2001/03/daml+oil#UniqueProperty"/>
<rdfs:range rdf:resource="http://www.w3.org/2000/10/XMLSchema#nonNegativeInteger"/>
</daml:DatatypeProperty>
<daml:Class rdf:ID="Person">
<rdfs:subClassOf rdf:resource="#Animal"/>
<rdfs:subClassOf>
<daml:Restriction>
<daml:onProperty rdf:resource="#hasParent"/>
<daml:toClass rdf:resource="#Person"/>
</daml:Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<daml:Restriction daml:cardinality="1">
<daml:onProperty rdf:resource="#hasFather"/>
</daml:Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<daml:Restriction>
<daml:onProperty rdf:resource="#shoesize"/>
<daml:minCardinality>1</daml:minCardinality>
</daml:Restriction>
</rdfs:subClassOf>
</daml:Class>
<daml:Class rdf:about="#Animal">
<rdfs:subClassOf>
<daml:Restriction daml:cardinality="2">
<daml:onProperty rdf:resource="#hasParent"/>
</daml:Restriction>
</rdfs:subClassOf>
</daml:Class>
<daml:Class rdf:about="#Person">
<rdfs:subClassOf>
<daml:Restriction daml:maxCardinality="1">
<daml:onProperty rdf:resource="#hasSpouse"/>
</daml:Restriction>
</rdfs:subClassOf>
</daml:Class>
<daml:Class rdf:about="#Person">
<rdfs:subClassOf>
<daml:Restriction daml:maxCardinalityQ="1">
<daml:onProperty rdf:resource="#hasOccupation"/>
<daml:hasClassQ rdf:resource="#FullTimeOccupation"/>
</daml:Restriction>
</rdfs:subClassOf>
</daml:Class>
<daml:UniqueProperty rdf:ID="hasMother">
<rdfs:subPropertyOf rdf:resource="#hasParent"/>
<rdfs:range rdf:resource="#Female"/>
</daml:UniqueProperty>
<daml:ObjectProperty rdf:ID="hasChild">
<daml:inverseOf rdf:resource="#hasParent"/>
</daml:ObjectProperty>
<daml:TransitiveProperty rdf:ID="hasAncestor">
<rdfs:label>hasAncestor</rdfs:label>
</daml:TransitiveProperty>
<daml:TransitiveProperty rdf:ID="descendant"/>
<daml:ObjectProperty rdf:ID="hasMom">
<daml:samePropertyAs rdf:resource="#hasMother"/>
</daml:ObjectProperty>
<daml:Class rdf:ID="Car">
<rdfs:subClassOf>
<daml:Class>
<daml:complementOf rdf:resource="#Person"/>
</daml:Class>
</rdfs:subClassOf>
</daml:Class>
<!-- @@CAVEAT: daml:collection is an extension of RDF 1.0 syntax;
don't expect existing tools to support it.
See http://www.daml.org/2001/03/reference.html#collection for details.
-->
<daml:Class rdf:about="#Person">
<daml:disjointUnionOf rdf:parseType="daml:collection">
<daml:Class rdf:about="#Man"/>
<daml:Class rdf:about="#Woman"/>
</daml:disjointUnionOf>
</daml:Class>
<daml:Class rdf:ID="TallMan">
<daml:intersectionOf rdf:parseType="daml:collection">
<daml:Class rdf:about="#TallThing"/>
<daml:Class rdf:about="#Man"/>
</daml:intersectionOf>
</daml:Class>
<daml:Class rdf:ID="MarriedPerson">
<daml:intersectionOf rdf:parseType="daml:collection">
<daml:Class rdf:about="#Person"/>
<daml:Restriction daml:cardinality="1">
<daml:onProperty rdf:resource="#hasSpouse"/>
</daml:Restriction>
</daml:intersectionOf>
</daml:Class>
<daml:Class rdf:ID="HumanBeing">
<daml:sameClassAs rdf:resource="#Person"/>
</daml:Class>
<daml:Class rdf:ID="Adult">
<daml:intersectionOf rdf:parseType="daml:collection">
<daml:Class rdf:about="#Person"/>
<daml:Restriction>
<daml:onProperty rdf:resource="#age"/>
<daml:hasClass rdf:resource="http://www.daml.org/2001/03/daml+oil-ex-dt#over17"/>
</daml:Restriction>
</daml:intersectionOf>
</daml:Class>
<daml:Class rdf:ID="Senior">
<daml:intersectionOf rdf:parseType="daml:collection">
<daml:Class rdf:about="#Person"/>
<daml:Restriction>
<daml:onProperty rdf:resource="#age"/>
<daml:hasClass rdf:resource="http://www.daml.org/2001/03/daml+oil-ex-dt#over59"/>
</daml:Restriction>
</daml:intersectionOf>
</daml:Class>
<Person rdf:ID="Adam">
<rdfs:label>Adam</rdfs:label>
<age><xsd:integer rdf:value="13"/></age>
<shoesize><xsd:decimal rdf:value="9.5"/></shoesize>
</Person>
<daml:ObjectProperty rdf:ID="hasHeight">
<rdfs:range rdf:resource="#Height"/>
</daml:ObjectProperty>
<daml:Class rdf:ID="Height">
<daml:oneOf rdf:parseType="daml:collection">
<Height rdf:ID="short"/>
<Height rdf:ID="medium"/>
<Height rdf:ID="tall"/>
</daml:oneOf>
</daml:Class>
<!-- TallThing is EXACTLY the class of things whose hasHeight is tall -->
<daml:Class rdf:ID="TallThing">
<daml:sameClassAs>
<daml:Restriction>
<daml:onProperty rdf:resource="#hasHeight"/>
<daml:hasValue rdf:resource="#tall"/>
</daml:Restriction>
</daml:sameClassAs>
</daml:Class>
<daml:DatatypeProperty rdf:ID="shirtsize">
<rdf:type rdf:resource="http://www.daml.org/2001/03/daml+oil#UniqueProperty"/>
<rdfs:range rdf:resource="http://www.daml.org/2001/03/daml+oil-ex-dt#clothingsize"/>
</daml:DatatypeProperty>
<rdfs:Class rdf:ID="BigFoot">
<daml:intersectionOf rdf:parseType="daml:collection">
<rdfs:Class rdf:about="#Person"/>
<daml:Restriction>
<daml:onProperty rdf:resource="#shoesize"/>
<daml:hasClass rdf:resource="http://www.daml.org/2001/03/daml+oil-ex-dt#over12"/>
</daml:Restriction>
</daml:intersectionOf>
</rdfs:Class>
<Person rdf:ID="Ian">
<shoesize>14</shoesize>
<age>37</age>
<shirtsize><xsd:string rdf:value="12"/></shirtsize>
</Person>
<Person rdf:ID="Peter">
<shoesize>9.5</shoesize>
<age>46</age>
<shirtsize>15</shirtsize>
</Person>
<daml:DatatypeProperty rdf:ID="associatedData">
</daml:DatatypeProperty>
<daml:Class rdf:about="#Person">
<rdfs:subClassOf>
<daml:Restriction>
<daml:onProperty rdf:resource="#associatedData"/>
<daml:maxCardinality>1</daml:maxCardinality>
</daml:Restriction>
</rdfs:subClassOf>
</daml:Class>
<Person rdf:ID="Santa">
<associatedData><xsd:real rdf:value="3.14159"/></associatedData>
<associatedData><xsd:string rdf:value="3.14159"/></associatedData>
</Person>
</rdf:RDF>