W3C home > Mailing lists > Public > www-webont-wg@w3.org > October 2002

comments on food.owl

From: Peter F. Patel-Schneider <pfps@research.bell-labs.com>
Date: Thu, 31 Oct 2002 21:03:20 -0500 (EST)
Message-Id: <20021031.210320.112806254.pfps@research.bell-labs.com>
To: www-webont-wg@w3.org

Only a few minor comments here, including one group of necessary changes.

peter



<?xml version="1.0"?>
<!DOCTYPE owl [
     <!ENTITY vin  "http://www.example.org/wine.owl#" >
     <!ENTITY food "http://www.example.org/food.owl#" >
   ]>

<rdf:RDF
  xmlns     = "http://www.example.org/food.owl#"
  xmlns:food= "http://www.example.org/food.owl#"
  xmlns:vin = "http://www.example.org/wine.owl#"
  xmlns:owl = "http://www.w3.org/@@/owl#"
  xmlns:rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:rdfs= "http://www.w3.org/2000/01/rdf-schema#">

<!-- PFPS - If (and this is a very ugly if) OWL cannot add anything to the
rdf:RDF element, I think that this is the right (and only) way of stating
Ontology-like things.  In particular, putting a non-empty URI here is a
very, very bad idea. -->

  <owl:Ontology rdf:about="">
    <rdfs:comment>
      Derived from the DAML Wine ontology at 
      http://ontolingua.stanford.edu/doc/chimaera/ontologies/wines.daml
      Substantially modified.
    </rdfs:comment>
  </owl:Ontology>

  <owl:Class rdf:ID="ConsumableThing" />

  <owl:Class rdf:ID="NonConsumableThing">
    <owl:complementOf rdf:resource="#ConsumableThing" />
  </owl:Class>

  <owl:Class rdf:ID="EdibleThing">
    <rdfs:subClassOf rdf:resource="#ConsumableThing" />
  </owl:Class>
  
  <owl:Class rdf:ID="PotableLiquid">
    <rdfs:subClassOf rdf:resource="#ConsumableThing" />
    <owl:disjointWith rdf:resource="#EdibleThing" />
  </owl:Class>
  
  <owl:Class rdf:ID="Wine">
    <rdfs:subClassOf rdf:resource="#PotableLiquid" />
    <owl:sameClassAs rdf:resource="&vin;Wine"/>
  </owl:Class>

  <owl:ObjectProperty rdf:ID="hasDrink">
    <rdfs:domain rdf:resource="#MealCourse" />
    <rdfs:range rdf:resource="#Wine" />
  </owl:ObjectProperty>
  
<!-- PFPS all these sameClassAs that were here have to change to sameIndividualAs
     I'm not sure the whole idea of not using "&vin;White" directly is not
     better, however. -->

  <owl:Thing rdf:ID="White">
    <owl:sameIndividualAs rdf:resource="&vin;White"/>
  </owl:Thing>

  <owl:Thing rdf:ID="Rose">
    <owl:sameIndividualAs rdf:resource="&vin;Rose" />
  </owl:Thing>

  <owl:Thing rdf:ID="Red">
    <owl:sameIndividualAs rdf:resource="&vin;Red" />
  </owl:Thing>

  <owl:Thing rdf:ID="Sweet">
    <owl:sameIndividualAs rdf:resource="&vin;Sweet" />
  </owl:Thing>

  <owl:Thing rdf:ID="OffDry">
    <owl:sameIndividualAs rdf:resource="&vin;OffDry" />
  </owl:Thing>

  <owl:Thing rdf:ID="Dry">
    <owl:sameIndividualAs rdf:resource="&vin;Dry" />
  </owl:Thing>

  <owl:Thing rdf:ID="Delicate">
    <owl:sameIndividualAs rdf:resource="&vin;Delicate" />
  </owl:Thing>

  <owl:Thing rdf:ID="Moderate">
    <owl:sameIndividualAs rdf:resource="&vin;Moderate" />
  </owl:Thing>

  <owl:Thing rdf:ID="Strong">
    <owl:sameIndividualAs rdf:resource="&vin;Strong" />
  </owl:Thing>

  <owl:Thing rdf:ID="Light">
    <owl:sameIndividualAs rdf:resource="&vin;Light" />
  </owl:Thing>

  <owl:Thing rdf:ID="Medium">
    <owl:sameIndividualAs rdf:resource="&vin;Medium" />
  </owl:Thing>

  <owl:Thing rdf:ID="Full">
    <owl:sameIndividualAs rdf:resource="&vin;Full" />
  </owl:Thing>

  <owl:ObjectProperty rdf:ID="course">
    <rdfs:domain rdf:resource="#Meal" />
    <rdfs:range rdf:resource="#MealCourse" />
  </owl:ObjectProperty>
  
  <owl:Class rdf:ID="Grape">
    <rdfs:subClassOf rdf:resource="#SweetFruit" />
  </owl:Class>
  
  <owl:Class rdf:ID="Pasta">
    <rdfs:subClassOf rdf:resource="#EdibleThing" />
    <owl:disjointWith rdf:resource="#Meat" />
    <owl:disjointWith rdf:resource="#Fowl" />
    <owl:disjointWith rdf:resource="#Seafood" />
    <owl:disjointWith rdf:resource="#Dessert" />
    <owl:disjointWith rdf:resource="#Fruit" />
  </owl:Class>
  
  <owl:Class rdf:ID="PastaWithWhiteSauce">
    <rdfs:subClassOf rdf:resource="#Pasta" />
    <owl:disjointWith rdf:resource="#PastaWithRedSauce" />
  </owl:Class>
  
<!-- PFPS It would be nice to show off the different features of OWL here.
     For example, an embedded intersectionOf of the restrictins would be
     nice sometimes. -->

  <owl:Class rdf:ID="PastaWithSpicyRedSauceCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#PastaWithSpicyRedSauce" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasColor" />
            <owl:hasValue rdf:resource="#Red" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasBody" />
            <owl:hasValue rdf:resource="#Full" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasFlavor" />
            <owl:hasValue rdf:resource="#Strong" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasSugar" />
            <owl:hasValue rdf:resource="#Dry" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="PastaWithSpicyRedSauce">
    <rdfs:subClassOf rdf:resource="#PastaWithRedSauce" />
  </owl:Class>
  
  <owl:Class rdf:ID="PastaWithRedSauce">
    <rdfs:subClassOf rdf:resource="#Pasta" />
  </owl:Class>
  
  <owl:Class rdf:ID="PastaWithNonSpicyRedSauceCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#PastaWithNonSpicyRedSauce" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasColor" />
            <owl:hasValue rdf:resource="#Red" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasBody" />
            <owl:hasValue rdf:resource="#Medium" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasFlavor" />
            <owl:hasValue rdf:resource="#Moderate" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasSugar" />
            <owl:hasValue rdf:resource="#Dry" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="PastaWithNonSpicyRedSauce">
    <rdfs:subClassOf rdf:resource="#PastaWithRedSauce" />
    <owl:disjointWith rdf:resource="#PastaWithSpicyRedSauce" />
  </owl:Class>
  
  <owl:Class rdf:ID="PastaWithLightCreamSauce">
    <rdfs:subClassOf rdf:resource="#PastaWithWhiteSauce" />
    <owl:disjointWith rdf:resource="#PastaWithHeavyCreamSauce" />
  </owl:Class>
  
  <owl:Class rdf:ID="PastaWithLightCreamCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#PastaWithLightCreamSauce" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasColor" />
            <owl:hasValue rdf:resource="#White" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasBody" />
            <owl:hasValue rdf:resource="#Light" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasFlavor" />
            <owl:hasValue rdf:resource="#Delicate" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasSugar" />
            <owl:hasValue rdf:resource="#Dry" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="PastaWithHeavyCreamSauce">
    <rdfs:subClassOf rdf:resource="#PastaWithWhiteSauce" />
  </owl:Class>
  
  <owl:Class rdf:ID="PastaWithHeavyCreamCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#PastaWithHeavyCreamSauce" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasColor" />
            <owl:hasValue rdf:resource="#White" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasBody" />
            <owl:hasValue rdf:resource="#Medium" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasFlavor" />
            <owl:hasValue rdf:resource="#Moderate" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasSugar" />
            <owl:hasValue rdf:resource="#Dry" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="OysterShellfishCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#OysterShellfish" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasSugar" />
            <owl:hasValue rdf:resource="#Sweet" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="OysterShellfish">
    <rdfs:subClassOf rdf:resource="#Shellfish" />
  </owl:Class>
  
  <owl:Class rdf:ID="OtherTomatoBasedFoodCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#OtherTomatoBasedFood" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasColor" />
            <owl:hasValue rdf:resource="#Red" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasBody" />
            <owl:hasValue rdf:resource="#Medium" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasFlavor" />
            <owl:hasValue rdf:resource="#Moderate" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasSugar" />
            <owl:hasValue rdf:resource="#Dry" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="OtherTomatoBasedFood">
    <rdfs:subClassOf rdf:resource="#EdibleThing" />
    <owl:disjointWith rdf:resource="#Pasta" />
    <owl:disjointWith rdf:resource="#Meat" />
    <owl:disjointWith rdf:resource="#Fowl" />
    <owl:disjointWith rdf:resource="#Seafood" />
    <owl:disjointWith rdf:resource="#Dessert" />
    <owl:disjointWith rdf:resource="#Fruit" />
  </owl:Class>
  
  <owl:Class rdf:ID="NonSweetFruitCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#NonSweetFruit" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasFlavor" />
            <owl:hasValue rdf:resource="#Delicate" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasSugar" />
            <owl:hasValue rdf:resource="#OffDry" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="SweetFruitCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#SweetFruit" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasFlavor" />
            <owl:hasValue rdf:resource="#Moderate" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasSugar" />
            <owl:hasValue rdf:resource="#Sweet" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <!-- changed so that Fruit can be unionOf 
  <owl:Class rdf:ID="NonSweetFruit">
    <rdfs:subClassOf rdf:resource="#Fruit" />
    <owl:disjointWith rdf:resource="#SweetFruit" />
  </owl:Class>
  -->
  
  <owl:Class rdf:ID="NonSweetFruit">
    <rdfs:subClassOf rdf:resource="#EdibleThing" />
    <owl:disjointWith rdf:resource="#SweetFruit" />
  </owl:Class>
  
  <owl:Class rdf:ID="NonSpicyRedMeatCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#NonSpicyRedMeat" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasColor" />
            <owl:hasValue rdf:resource="#Red" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasBody" />
            <owl:hasValue rdf:resource="#Medium" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasSugar" />
            <owl:hasValue rdf:resource="#Dry" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasFlavor" />
            <owl:hasClass>
              <owl:Class>
                <owl:oneOf rdf:parseType="Collection">
                  <owl:Item rdf:resource="#Strong" />
                  <owl:Item rdf:resource="#Moderate" />
                </owl:oneOf>
              </owl:Class>
            </owl:hasClass>
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
<!-- PFPS  the above restriction with the oneOf could be changed to a union
     of restrictions, again to show off OWL. -->


  <owl:Class rdf:ID="NonSpicyRedMeat">
    <rdfs:subClassOf rdf:resource="#RedMeat" />
    <owl:disjointWith rdf:resource="#SpicyRedMeat" />
  </owl:Class>
  
  <owl:Class rdf:ID="NonRedMeatCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#NonRedMeat" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasColor" />
            <owl:hasValue rdf:resource="#White" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasBody" />
            <owl:hasValue rdf:resource="#Medium" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasFlavor" />
            <owl:hasValue rdf:resource="#Strong" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasSugar" />
            <owl:hasValue rdf:resource="#Dry" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="NonRedMeat">
    <rdfs:subClassOf rdf:resource="#Meat" />
    <owl:disjointWith rdf:resource="#RedMeat" />
  </owl:Class>
  
  <owl:Class rdf:ID="NonOysterShellfishCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#NonOysterShellfish" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasSugar" />
            <owl:hasValue rdf:resource="#Dry" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="NonOysterShellfish">
    <rdfs:subClassOf rdf:resource="#Shellfish" />
    <owl:disjointWith rdf:resource="#OysterShellfish" />
  </owl:Class>
  
  <owl:Class rdf:ID="NonBlandFishCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#NonBlandFish" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasFlavor" />
            <owl:hasValue rdf:resource="#Moderate" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="NonBlandFish">
    <rdfs:subClassOf rdf:resource="#Fish" />
  </owl:Class>
  
  <owl:Class rdf:ID="Meat">
    <rdfs:subClassOf rdf:resource="#EdibleThing" />
    <owl:disjointWith rdf:resource="#Fowl" />
    <owl:disjointWith rdf:resource="#Seafood" />
    <owl:disjointWith rdf:resource="#Dessert" />
    <owl:disjointWith rdf:resource="#Fruit" />
  </owl:Class>
  
  <owl:Class rdf:ID="MealCourse">
    <rdfs:subClassOf rdf:resource="#ConsumableThing" />
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:minCardinality>1</owl:minCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#EdibleThing" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:minCardinality>1</owl:minCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom rdf:resource="#Wine" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:disjointWith rdf:resource="#PotableLiquid" />
    <owl:disjointWith rdf:resource="#EdibleThing" />
  </owl:Class>
  
  <owl:Class rdf:ID="Meal">
    <rdfs:subClassOf rdf:resource="#ConsumableThing" />
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#course" />
        <owl:minCardinality>1</owl:minCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#course" />
        <owl:allValuesFrom rdf:resource="#MealCourse" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:disjointWith rdf:resource="#MealCourse" />
    <owl:disjointWith rdf:resource="#PotableLiquid" />
    <owl:disjointWith rdf:resource="#EdibleThing" />
  </owl:Class>
  
  <owl:Class rdf:ID="LightMeatFowlCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#LightMeatFowl" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasColor" />
            <owl:hasValue rdf:resource="#White" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasBody" />
            <owl:hasValue rdf:resource="#Medium" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasFlavor" />
            <owl:hasValue rdf:resource="#Moderate" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasSugar" />
            <owl:hasValue rdf:resource="#Dry" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="LightMeatFowl">
    <rdfs:subClassOf rdf:resource="#Fowl" />
  </owl:Class>
  
  <owl:Class rdf:ID="FruitCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#Fruit" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasColor" />
            <owl:hasValue rdf:resource="#White" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasBody" />
            <owl:hasValue rdf:resource="#Medium" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <!--- Replaced so that we have a unionOf construct
        Aug 20 02 MKS, suggestion by R. Volz.  

  <owl:Class rdf:ID="Fruit">
    <rdfs:subClassOf rdf:resource="#EdibleThing" />
  </owl:Class>

  --> 
  
  <owl:Class rdf:ID="Fruit">
    <owl:unionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#SweetFruit" />
      <owl:Class rdf:about="#NonSweetFruit" />
    </owl:unionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Fowl">
    <rdfs:subClassOf rdf:resource="#EdibleThing" />
    <owl:disjointWith rdf:resource="#Seafood" />
    <owl:disjointWith rdf:resource="#Dessert" />
    <owl:disjointWith rdf:resource="#Fruit" />
  </owl:Class>
  
  <owl:Class rdf:ID="FishCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#Fish" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasBody" />
            <owl:hasValue rdf:resource="#Medium" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasSugar" />
            <owl:hasValue rdf:resource="#Dry" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="DessertCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#Dessert" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasBody" />
            <owl:hasValue rdf:resource="#Full" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasFlavor" />
            <owl:hasValue rdf:resource="#Strong" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasSugar" />
            <owl:hasValue rdf:resource="#Sweet" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Dessert">
    <rdfs:subClassOf rdf:resource="#EdibleThing" />
    <owl:disjointWith rdf:resource="#Fruit" />
  </owl:Class>
  
  <!-- changed so that Fruit can be unionOf 
  <owl:Class rdf:ID="SweetFruit">
    <rdfs:subClassOf rdf:resource="#Fruit" />
  </owl:Class>
  -->
  <owl:Class rdf:ID="SweetFruit">
    <rdfs:subClassOf rdf:resource="#EdibleThing" />
  </owl:Class>
  
  <owl:Class rdf:ID="SweetDessertCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#SweetDessert" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasColor" />
            <owl:hasValue rdf:resource="#White" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="SweetDessert">
    <rdfs:subClassOf rdf:resource="#Dessert" />
  </owl:Class>
  
  <owl:Class rdf:ID="DarkMeatFowlCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#DarkMeatFowl" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasColor" />
            <owl:hasValue rdf:resource="#Red" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasBody" />
            <owl:hasValue rdf:resource="#Light" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasFlavor" />
            <owl:hasValue rdf:resource="#Delicate" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasSugar" />
            <owl:hasValue rdf:resource="#Dry" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="DarkMeatFowl">
    <rdfs:subClassOf rdf:resource="#Fowl" />
    <owl:disjointWith rdf:resource="#LightMeatFowl" />
  </owl:Class>
  
  <owl:Class rdf:ID="CheeseNutsDessertCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#CheeseNutsDessert" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasColor" />
            <owl:hasValue rdf:resource="#Red" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="CheeseNutsDessert">
    <rdfs:subClassOf rdf:resource="#Dessert" />
    <owl:disjointWith rdf:resource="#SweetDessert" />
  </owl:Class>
  
  <owl:Class rdf:ID="BlandFishCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#BlandFish" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasFlavor" />
            <owl:hasValue rdf:resource="#Delicate" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="BlandFish">
    <rdfs:subClassOf rdf:resource="#Fish" />
    <owl:disjointWith rdf:resource="#NonBlandFish" />
  </owl:Class>
  
  <owl:ObjectProperty rdf:ID="hasFood">
    <rdfs:range rdf:resource="#EdibleThing" />
    <rdfs:domain rdf:resource="#MealCourse" />
  </owl:ObjectProperty>
  
  <owl:Class rdf:ID="Fish">
    <rdfs:subClassOf rdf:resource="#Seafood" />
    <owl:disjointWith rdf:resource="#Shellfish" />
  </owl:Class>
  
  <owl:Class rdf:ID="SpicyRedMeat">
    <rdfs:subClassOf rdf:resource="#RedMeat" />
  </owl:Class>
  
  <owl:Class rdf:ID="ShellfishCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#Shellfish" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasFlavor" />
            <owl:hasClass>
              <owl:Class>
                <owl:oneOf rdf:parseType="Collection">
                  <owl:Item rdf:resource="#Moderate" />
                  <owl:Item rdf:resource="#Strong" />
                </owl:oneOf>
              </owl:Class>
            </owl:hasClass>
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasBody" />
            <owl:hasValue rdf:resource="#Full" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Shellfish">
    <rdfs:subClassOf rdf:resource="#Seafood" />
  </owl:Class>
  
  <owl:Class rdf:ID="SeafoodCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#Seafood" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasColor" />
            <owl:hasValue rdf:resource="#White" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Seafood">
    <rdfs:subClassOf rdf:resource="#EdibleThing" />
    <owl:disjointWith rdf:resource="#Dessert" />
    <owl:disjointWith rdf:resource="#Fruit" />
  </owl:Class>
  
  <owl:Class rdf:ID="RedMeatCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#RedMeat" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasColor" />
            <owl:hasValue rdf:resource="#Red" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="RedMeat">
    <rdfs:subClassOf rdf:resource="#Meat" />
  </owl:Class>
  
  <SweetDessert rdf:ID="Cake" />
  
  <SweetFruit rdf:ID="Bananas" />
  
  <SweetFruit rdf:ID="MixedFruit" />
  
  <NonOysterShellfish rdf:ID="Mussels" />
  
  <CheeseNutsDessert rdf:ID="Nuts" />
  
  <OysterShellfish rdf:ID="Oysters" />
  
  <PastaWithLightCreamSauce rdf:ID="PastaWithWhiteClamSauce" />
  
  <SweetFruit rdf:ID="Peaches" />
  
  <SweetDessert rdf:ID="Pie" />
  
  <OtherTomatoBasedFood rdf:ID="Pizza" />
  
  <NonRedMeat rdf:ID="Pork" />
  
  <NonSpicyRedMeat rdf:ID="RoastBeef" />
  
  <BlandFish rdf:ID="Scrod" />
  
  <PastaWithNonSpicyRedSauce rdf:ID="SpaghettiWithTomatoSauce" />
  
  <NonSpicyRedMeat rdf:ID="Steak" />
  
  <NonBlandFish rdf:ID="Swordfish" />
  
  <EatingGrape rdf:ID="ThompsonSeedless" />
  
  <owl:Class rdf:ID="EatingGrape">
    <rdfs:subClassOf rdf:resource="#Grape" />
  </owl:Class>

  <NonBlandFish rdf:ID="Tuna" />
  
  <LightMeatFowl rdf:ID="Turkey" />
  
  <NonSpicyRedMeat rdf:ID="Veal" />
  
  <owl:Class rdf:ID="SpicyRedMeatCourse">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MealCourse" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFood" />
        <owl:allValuesFrom rdf:resource="#SpicyRedMeat" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasColor" />
            <owl:hasValue rdf:resource="#Red" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasBody" />
            <owl:hasValue rdf:resource="#Full" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasFlavor" />
            <owl:hasValue rdf:resource="#Moderate" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasDrink" />
        <owl:allValuesFrom>
          <owl:Restriction>
            <owl:onProperty rdf:resource="&vin;hasSugar" />
            <owl:hasValue rdf:resource="#Dry" />
          </owl:Restriction>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <SpicyRedMeat rdf:ID="BeefCurry" />
  
  <LightMeatFowl rdf:ID="Chicken" />
  
  <NonOysterShellfish rdf:ID="Clams" />
  
  <DarkMeatFowl rdf:ID="Duck" />
  
  <SpicyRedMeat rdf:ID="GarlickyRoast" />
  
  <DarkMeatFowl rdf:ID="Goose" />
  
  <BlandFish rdf:ID="Halibut" />
  
  <NonOysterShellfish rdf:ID="Crab" />
  
  <BlandFish rdf:ID="Flounder" />
  
  <NonOysterShellfish rdf:ID="Lobster" />
  
  <PastaWithHeavyCreamSauce rdf:ID="FettucineAlfRedo" />
  
  <PastaWithSpicyRedSauce rdf:ID="FraDiavolo" />
  
  <CheeseNutsDessert rdf:ID="Cheese" />
  
</rdf:RDF>
Received on Thursday, 31 October 2002 21:03:30 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 7 December 2009 10:57:53 GMT