<?xml version="1.0"?>


<!DOCTYPE rdf:RDF [
    <!ENTITY owl "http://www.w3.org/2002/07/owl#" >
    <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
    <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
    <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
]>


<rdf:RDF xmlns="http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#"
     xml:base="http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:owl="http://www.w3.org/2002/07/owl#">
    <owl:Ontology rdf:about="">
        <rdfs:comment rdf:datatype="&xsd;string"
            >This is a simple demo ontology of how to do classes as values using individuals.
It would best be done with puns in OWL 1.1 but since that is not yet available...

NB.  For technical reasons I have defined the property dc-subject rather than imported Dublin core properly</rdfs:comment>
    </owl:Ontology>
    


    <!-- 
    ///////////////////////////////////////////////////////////////////////////
    //
    //   OWL Classes
    //
    ///////////////////////////////////////////////////////////////////////////
     -->

    


    <!-- Class: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#Animal -->

    <owl:Class rdf:about="#Animal">
        <rdfs:subClassOf>
            <owl:Class rdf:about="#Living_thing"/>
        </rdfs:subClassOf>
    </owl:Class>
    


    <!-- Class: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#Book -->

    <owl:Class rdf:about="#Book">
        <rdfs:subClassOf>
            <owl:Class rdf:about="#Oeuvre"/>
        </rdfs:subClassOf>
    </owl:Class>
    


    <!-- Class: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#Book_about_a_lion -->

    <owl:Class rdf:about="#Book_about_a_lion">
        <owl:equivalentClass>
            <owl:Class>
                <owl:intersectionOf rdf:parseType="Collection">
                    <owl:Class rdf:about="#Book"/>
                    <owl:Restriction>
                        <owl:onProperty rdf:resource="#dc-subject"/>
                        <owl:someValuesFrom rdf:resource="#Lion"/>
                    </owl:Restriction>
                </owl:intersectionOf>
            </owl:Class>
        </owl:equivalentClass>
    </owl:Class>
    


    <!-- Class: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#Book_about_lions -->

    <owl:Class rdf:about="#Book_about_lions">
        <rdfs:comment rdf:datatype="&xsd;string"
            >Any book that is about the class of lions - not some individual.</rdfs:comment>
        <owl:equivalentClass>
            <owl:Class>
                <owl:intersectionOf rdf:parseType="Collection">
                    <owl:Class rdf:about="#Book"/>
                    <owl:Restriction>
                        <owl:onProperty rdf:resource="#dc-subject"/>
                        <owl:hasValue rdf:resource="#lion_class"/>
                    </owl:Restriction>
                </owl:intersectionOf>
            </owl:Class>
        </owl:equivalentClass>
    </owl:Class>
    


    <!-- Class: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#Class_of_classes -->

    <owl:Class rdf:about="#Class_of_classes">
        <rdfs:subClassOf>
            <owl:Class rdf:about="&owl;Thing"/>
        </rdfs:subClassOf>
    </owl:Class>
    


    <!-- Class: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#Domain_entity -->

    <owl:Class rdf:about="#Domain_entity">
        <rdfs:subClassOf>
            <owl:Class rdf:about="&owl;Thing"/>
        </rdfs:subClassOf>
    </owl:Class>
    


    <!-- Class: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#Lion -->

    <owl:Class rdf:about="#Lion">
        <rdfs:subClassOf>
            <owl:Class rdf:about="#Mammal"/>
        </rdfs:subClassOf>
    </owl:Class>
    


    <!-- Class: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#Living_thing -->

    <owl:Class rdf:about="#Living_thing">
        <rdfs:subClassOf>
            <owl:Class rdf:about="#Domain_entity"/>
        </rdfs:subClassOf>
    </owl:Class>
    


    <!-- Class: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#Mammal -->

    <owl:Class rdf:about="#Mammal">
        <rdfs:subClassOf>
            <owl:Class rdf:about="#Animal"/>
        </rdfs:subClassOf>
    </owl:Class>
    


    <!-- Class: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#Oeuvre -->

    <owl:Class rdf:about="#Oeuvre">
        <rdfs:subClassOf>
            <owl:Class rdf:about="#Domain_entity"/>
        </rdfs:subClassOf>
    </owl:Class>
    


    <!-- 
    ///////////////////////////////////////////////////////////////////////////
    //
    //   OWL Object Properties
    //
    ///////////////////////////////////////////////////////////////////////////
     -->

    


    <!-- Object property: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#class_of_classes_properties -->

    <owl:ObjectProperty rdf:about="#class_of_classes_properties"/>
    


    <!-- Object property: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#dc-subject -->

    <owl:ObjectProperty rdf:about="#dc-subject">
        <rdfs:comment rdf:datatype="&xsd;string"
            >A proxy for the standard Dublin Core dc:subject.  Defined here to avoid imports and technical issues with domains which would just confuse the primary issue.</rdfs:comment>
        <rdfs:domain>
            <owl:Class rdf:about="#Oeuvre"/>
        </rdfs:domain>
        <rdfs:range>
            <owl:Class>
                <owl:unionOf rdf:parseType="Collection">
                    <owl:Class rdf:about="#Domain_entity"/>
                    <owl:Class rdf:about="#Class_of_classes"/>
                </owl:unionOf>
            </owl:Class>
        </rdfs:range>
    </owl:ObjectProperty>
    


    <!-- Object property: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#has_direct_subclass -->

    <owl:ObjectProperty rdf:about="#has_direct_subclass"/>
    


    <!-- Object property: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#has_subclass -->

    <owl:ObjectProperty rdf:about="#has_subclass"/>
    


    <!-- Object property: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#is_direct_subclass_of -->

    <owl:ObjectProperty rdf:about="#is_direct_subclass_of">
        <owl:inverseOf>
            <owl:ObjectProperty rdf:about="#has_direct_subclass"/>
        </owl:inverseOf>
    </owl:ObjectProperty>
    


    <!-- Object property: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#is_subclass_of -->

    <owl:ObjectProperty rdf:about="#is_subclass_of">
        <rdfs:comment rdf:datatype="&xsd;string"
            >A relation between individual classes mirroring the subclass relationship inferred by the reasoner amongst classes.  This mirroring must be maintained outside the reasoner and is not visible to it.

It is usually best to have a direct-subclass relation which relates to this specific ontology, but not necessary.  For some applications, the metaclasses should be closed, i.e. they represent the representation rather than the class.</rdfs:comment>
        <rdf:type rdf:resource="&owl;TransitiveProperty"/>
        <owl:inverseOf>
            <owl:ObjectProperty rdf:about="#has_subclass"/>
        </owl:inverseOf>
        <rdfs:domain>
            <owl:Class rdf:about="#Class_of_classes"/>
        </rdfs:domain>
        <rdfs:range>
            <owl:Class rdf:about="#Class_of_classes"/>
        </rdfs:range>
    </owl:ObjectProperty>
    


    <!-- 
    ///////////////////////////////////////////////////////////////////////////
    //
    //   OWL Individuals
    //
    ///////////////////////////////////////////////////////////////////////////
     -->

    


    <!-- Individual: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#animal_class -->

    <Class_of_classes rdf:about="#animal_class">
        <is_subclass_of rdf:resource="#living_thing_class"/>
    </Class_of_classes>
    


    <!-- Individual: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#book_class -->

    <Class_of_classes rdf:about="#book_class"/>
    


    <!-- Individual: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#born_free -->

    <Book rdf:about="#born_free">
        <rdfs:comment rdf:datatype="&xsd;string"
            >The book &quot;Born Free&quot; about &quot;Elsie&quot; the Lion.</rdfs:comment>
        <dc-subject rdf:resource="#elsie"/>
    </Book>
    


    <!-- Individual: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#elsie -->

    <Lion rdf:about="#elsie">
        <rdfs:comment rdf:datatype="&xsd;string"
            >The lion in the book &quot;Born Free&quot;</rdfs:comment>
    </Lion>
    


    <!-- Individual: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#life_of_the_pride -->

    <Book rdf:about="#life_of_the_pride">
        <rdfs:comment rdf:datatype="&xsd;string"
            >The specific book &quot;Life of the Pride&quot;</rdfs:comment>
        <dc-subject rdf:resource="#lion_class"/>
    </Book>
    


    <!-- Individual: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#lion_class -->

    <Class_of_classes rdf:about="#lion_class">
        <is_subclass_of rdf:resource="#animal_class"/>
    </Class_of_classes>
    


    <!-- Individual: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#living_thing_class -->

    <owl:Thing rdf:about="#living_thing_class"/>
    


    <!-- Individual: http://www.co-ode.org/teaching-examples/classes-as-values/classes-as-values-meta-01.owl#mammal_class -->

    <Class_of_classes rdf:about="#mammal_class">
        <is_subclass_of rdf:resource="#animal_class"/>
    </Class_of_classes>
    


    <!-- 
    ///////////////////////////////////////////////////////////////////////////
    //
    //   OWL Axioms
    //
    ///////////////////////////////////////////////////////////////////////////
     -->

    <owl:Class rdf:about="#Domain_entity">
        <owl:disjointWith>
            <owl:Class rdf:about="#Class_of_classes"/>
        </owl:disjointWith>
    </owl:Class>
    <owl:Class rdf:about="#Class_of_classes">
        <owl:disjointWith>
            <owl:Class rdf:about="#Domain_entity"/>
        </owl:disjointWith>
    </owl:Class>
    <owl:Class rdf:about="#Living_thing">
        <owl:disjointWith>
            <owl:Class rdf:about="#Oeuvre"/>
        </owl:disjointWith>
    </owl:Class>
    <owl:Class rdf:about="#Oeuvre">
        <owl:disjointWith>
            <owl:Class rdf:about="#Living_thing"/>
        </owl:disjointWith>
    </owl:Class>
    <rdf:Description rdf:about="#has_direct_subclass">
        <rdfs:subPropertyOf rdf:resource="#has_subclass"/>
    </rdf:Description>
    <rdf:Description rdf:about="#has_subclass">
        <rdfs:subPropertyOf rdf:resource="#class_of_classes_properties"/>
    </rdf:Description>
    <rdf:Description rdf:about="#is_direct_subclass_of">
        <rdfs:subPropertyOf rdf:resource="#is_subclass_of"/>
    </rdf:Description>
    <rdf:Description rdf:about="#is_subclass_of">
        <rdfs:subPropertyOf rdf:resource="#class_of_classes_properties"/>
    </rdf:Description>
    <rdf:Description rdf:about="#dc-subject">
        <rdfs:subPropertyOf rdf:resource="#class_of_classes_properties"/>
    </rdf:Description>
</rdf:RDF>

