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

comments on wine.owl

From: Peter F. Patel-Schneider <pfps@research.bell-labs.com>
Date: Thu, 31 Oct 2002 21:16:46 -0500 (EST)
Message-Id: <20021031.211646.40564607.pfps@research.bell-labs.com>
To: www-webont-wg@w3.org
The ordering (or lack thereof) of the document makes it rather hard to
read!  :-(

I only really looked at the first quarter or so of the document.

peter



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

<!-- PFPS   xmlns:dte = "http://www.w3.org/@@/owl-ex-dt.xsd" was not used -->

<rdf:RDF
  xmlns     = "http://www.example.org/wine.owl#"
  xmlns:vin = "http://www.example.org/wine.owl#"
  xmlns:food= "http://www.example.org/food.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#"
  xmlns:xsd = "http://www.w3.org/2000/10/XMLSchema">

  <owl:Ontology rdf:about="">
    <rdfs:comment>
      Derived from the DAML Wine ontology at 
      http://ontolingua.stanford.edu/doc/chimaera/ontologies/wines.daml
      Substantially changed, in particular the Region based relations.
    </rdfs:comment>
  </owl:Ontology>
  
<!-- PFPS I'm not sure about all the min/max/- cardinalities here.  I guess
     that they are what is wanted, but someone (not me) should make sure. -->

  <owl:Class rdf:ID="Wine">
    <rdfs:subClassOf rdf:resource="&food;PotableLiquid" />
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasMaker" />
	<owl:minCardinality>1</owl:minCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasMaker" />
	<owl:allValuesFrom rdf:resource="#Winery" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
 	<owl:minCardinality>1</owl:minCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasSugar" />
        <owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFlavor" />
        <owl:minCardinality>1</owl:minCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasBody" />
        <owl:minCardinality>1</owl:minCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:minCardinality>1</owl:minCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasMaker" />
	<owl:minCardinality>1</owl:minCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Vintage">
    <rdfs:subClassOf rdf:resource="#Wine" />
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasVintageYear"/>  
        <owl:cardinality>1</owl:cardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>

  <owl:Class rdf:ID="Varietal">
    <rdfs:subClassOf rdf:resource="&food;Grape" />
  </owl:Class>
  
<!-- PFPS the sameClassAs that used to be here was wrong.  Similar problems
     occur elsewhere, I may not have caught them all.  In general the OWL
     keywords should have an uppercase/lowercase alternation. -->

  <owl:Class rdf:ID="WhiteWine">
      <owl:intersectionOf rdf:parseType="Collection">
        <owl:Class rdf:about="#Wine" />
        <owl:Restriction>
          <owl:onProperty rdf:resource="#hasColor" />
          <owl:hasValue rdf:resource="#White" />
        </owl:Restriction>
      </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="WhiteTableWine">
      <owl:intersectionOf rdf:parseType="Collection">
        <owl:Class rdf:about="#TableWine" />
        <owl:Restriction>
          <owl:onProperty rdf:resource="#hasColor" />
          <owl:hasValue rdf:resource="#White" />
        </owl:Restriction>
      </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="WhiteNonSweetWine">
      <owl:intersectionOf rdf:parseType="Collection">
        <owl:Class rdf:about="#WhiteWine" />
        <owl:Restriction>
          <owl:onProperty rdf:resource="#hasSugar" />
          <owl:allValuesFrom>
            <owl:Class>
              <owl:oneOf rdf:parseType="Collection">
                <owl:Item rdf:resource="#Dry" />
                <owl:Item rdf:resource="#OffDry" />
              </owl:oneOf>
            </owl:Class>
          </owl:allValuesFrom>
        </owl:Restriction>
      </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="WhiteLoire">
      <owl:intersectionOf rdf:parseType="Collection">
        <owl:Class rdf:about="#Loire" />
        <owl:Class rdf:about="#WhiteWine" />
      </owl:intersectionOf>
  </owl:Class>

  <owl:Class rdf:about="#WhiteLoire">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#CheninBlancGrape" />
              <owl:Item rdf:resource="#PinotBlancGrape" />
              <owl:Item rdf:resource="#SauvignonBlancGrape" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="WhiteBurgundy">
      <owl:intersectionOf rdf:parseType="Collection">
        <owl:Class rdf:about="#Burgundy" />
        <owl:Class rdf:about="#WhiteWine" />
      </owl:intersectionOf>
  </owl:Class>

  <owl:Class rdf:about="#WhiteBurgundy">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:hasValue rdf:resource="#ChardonnayGrape" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="WhiteBordeaux">
      <owl:intersectionOf rdf:parseType="Collection">
        <owl:Class rdf:about="#Bordeaux" />
        <owl:Class rdf:about="#WhiteWine" />
      </owl:intersectionOf>
  </owl:Class>

  <owl:Class rdf:about="#WhiteBordeaux">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#SemillonGrape" />
              <owl:Item rdf:resource="#SauvignonBlancGrape" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Region" />

<!-- PFPS the TransitiveProperty and other similar stuff was wrong. -->

  <owl:ObjectProperty rdf:ID="locatedIn">
    <rdf:type rdf:resource="http://www.w3.org/@@/owl#TransitiveProperty" />
    <rdfs:domain rdf:resource="http://www.w3.org/@@/owl#Thing" />
    <rdfs:range rdf:resource="#Region" />
  </owl:ObjectProperty>

  <owl:ObjectProperty rdf:ID="adjacentRegion">
    <rdf:type rdf:resource="http://www.w3.org/@@/owl#SymmetricProperty" />
    <rdfs:domain rdf:resource="#Region" />
    <rdfs:range rdf:resource="#Region" />
  </owl:ObjectProperty>
  
  <owl:Class rdf:ID="VintageYear" />

<!-- PFPS a range would be nice here, probably integer -->

  <owl:DataTypeProperty rdf:ID="yearValue">
    <rdfs:domain rdf:resource="#VintageYear" />    
  </owl:DataTypeProperty>
  
<!-- PFPS this is now closer to the RDF solution. -->

  <VintageYear rdf:ID="Year1998">
    <yearValue rdf:datatype="http://www.w3.org/2000/10/XMLSchema#integer">13</yearValue>
  </VintageYear>

  <owl:ObjectProperty rdf:ID="hasVintageYear">
    <rdf:type rdf:resource="http://www.w3.org/@@/owl#FunctionalProperty" />
    <rdfs:domain rdf:resource="#Vintage" />
    <rdfs:range  rdf:resource="#VintageYear" />
  </owl:ObjectProperty>
  
  <owl:ObjectProperty rdf:ID="madeFromVarietal">
    <rdfs:domain rdf:resource="#Wine" />
    <rdfs:range rdf:resource="#Varietal" />
  </owl:ObjectProperty>

  <owl:ObjectProperty rdf:ID="madeIntoWine">
    <rdfs:inverseOf rdf:resource="#madeFromVarietal" />
  </owl:ObjectProperty>

  <owl:ObjectProperty rdf:ID="hasWineDescriptor">
    <rdfs:domain rdf:resource="#Wine" />
    <rdfs:range  rdf:resource="#WineDescriptor" />
  </owl:ObjectProperty>

  <owl:ObjectProperty rdf:ID="hasSugar">
    <rdf:type rdf:resource="http://www.w3.org/@@/owl#FunctionalProperty" />
    <rdfs:subPropertyOf rdf:resource="#hasWineDescriptor" />
    <rdfs:range rdf:resource="#WineSugar" />
  </owl:ObjectProperty>
  
  <owl:ObjectProperty rdf:ID="hasBody">
    <rdf:type rdf:resource="http://www.w3.org/@@/owl#FunctionalProperty" />
    <rdfs:subPropertyOf rdf:resource="#hasWineDescriptor" />
    <rdfs:range rdf:resource="#WineBody" />
  </owl:ObjectProperty>
  
  <owl:ObjectProperty rdf:ID="hasFlavor">
    <rdf:type rdf:resource="http://www.w3.org/@@/owl#FunctionalProperty" />
    <rdfs:subPropertyOf rdf:resource="#hasWineDescriptor" />
    <rdfs:range rdf:resource="#WineFlavor" />
  </owl:ObjectProperty>
  
  <owl:ObjectProperty rdf:ID="hasColor">
    <rdf:type rdf:resource="http://www.w3.org/@@/owl#FunctionalProperty" />
    <rdfs:subPropertyOf rdf:resource="#hasWineDescriptor" />
    <rdfs:domain rdf:resource="#Wine" />
    <rdfs:range rdf:resource="#WineColor" />
  </owl:ObjectProperty>

  <owl:ObjectProperty rdf:ID="year">
    <rdf:type rdf:resource="http://www.w3.org/@@/owl#FunctionalProperty" />
    <rdfs:range rdf:resource="#Winery" />
    <rdfs:domain rdf:resource="#Wine" />
  </owl:ObjectProperty>
  
<!-- PFPS doman and range? -->

  <owl:ObjectProperty rdf:ID="hasMaker">
    <rdf:type rdf:resource="http://www.w3.org/@@/owl#FunctionalProperty" />
  </owl:ObjectProperty>
  
  <owl:ObjectProperty rdf:ID="hasWines">
    <owl:InverseOf rdf:resource="#hasMaker" />
  </owl:ObjectProperty>

  <owl:Class rdf:ID="Zinfandel">
      <owl:intersectionOf rdf:parseType="Collection">
        <owl:Class rdf:about="#Wine" />
        <owl:Restriction>
          <owl:onProperty rdf:resource="#madeFromVarietal" />
          <owl:hasValue rdf:resource="#ZinfandelGrape" />
        </owl:Restriction>
        <owl:Restriction>
          <owl:onProperty rdf:resource="#madeFromVarietal" />
          <owl:maxCardinality>1</owl:maxCardinality>
        </owl:Restriction>
      </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:about="#Zinfandel">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#Red" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasSugar" />
        <owl:hasValue rdf:resource="#Dry" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasBody" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#Full" />
              <owl:Item rdf:resource="#Medium" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFlavor" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#Moderate" />
              <owl:Item rdf:resource="#Strong" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Winery" />
  
<!-- PFPS the rdfs:comment takes this out of OWL/DL.
     I agree that it would be nice to allow such stuff in OWL/DL, expect
     something on this soon. -->

  <owl:Class rdf:ID="WineDescriptor">
    <rdfs:comment>Made WineDescriptor unionType of tastes and color</rdfs:comment>
      <owl:unionOf rdf:parseType="Collection">
        <owl:Class rdf:about="#WineTaste" />
        <owl:Class rdf:about="#WineColor" />
      </owl:unionOf>
  </owl:Class>

  <owl:Class rdf:ID="WineTaste">
    <rdfs:subClassOf rdf:resource="#WineDescriptor" />
  </owl:Class>

  <owl:Class rdf:ID="WineColor">
    <rdfs:subClassOf rdf:resource="#WineDescriptor" />
    <owl:oneOf rdf:parseType="Collection">
      <owl:Item rdf:resource="#White" />
      <owl:Item rdf:resource="#Rose" />
      <owl:Item rdf:resource="#Red" />
    </owl:oneOf>
  </owl:Class>
  
  <owl:Class rdf:ID="WineSugar">
    <rdfs:subClassOf rdf:resource="#WineTaste" />
    <owl:oneOf rdf:parseType="Collection">
      <owl:Item rdf:resource="#Sweet" />
      <owl:Item rdf:resource="#OffDry" />
      <owl:Item rdf:resource="#Dry" />
    </owl:oneOf>
  </owl:Class>
  
  <owl:Class rdf:ID="WineFlavor">
    <rdfs:subClassOf rdf:resource="#WineTaste" />
    <owl:oneOf rdf:parseType="Collection">
      <owl:Item rdf:resource="#Delicate" />
      <owl:Item rdf:resource="#Moderate" />
      <owl:Item rdf:resource="#Strong" />
    </owl:oneOf>
  </owl:Class>
  
  <owl:Class rdf:ID="WineBody">
    <rdfs:subClassOf rdf:resource="#WineTaste" />
    <owl:oneOf rdf:parseType="Collection">
      <owl:Item rdf:resource="#Light" />
      <owl:Item rdf:resource="#Medium" />
      <owl:Item rdf:resource="#Full" />
    </owl:oneOf>
  </owl:Class>
  
  <Region rdf:ID="UsRegion" />
  
  <owl:Class rdf:ID="Tours">
      <owl:intersectionOf rdf:parseType="Collection">
        <owl:Class rdf:about="#Loire" />
        <owl:Restriction>
          <owl:onProperty rdf:resource="#locatedIn" />
          <owl:hasValue rdf:resource="#ToursRegion" />
        </owl:Restriction>
      </owl:intersectionOf>
  </owl:Class>

  <owl:Class rdf:about="#Tours">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:hasValue rdf:resource="#CheninBlancGrape" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="TableWine">
      <owl:intersectionOf rdf:parseType="Collection">
        <owl:Class rdf:about="#Wine" />
        <owl:Restriction>
          <owl:onProperty rdf:resource="#hasSugar" />
          <owl:hasValue rdf:resource="#Dry" />
        </owl:Restriction>
      </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="SweetWine">
      <owl:intersectionOf rdf:parseType="Collection">
        <owl:Class rdf:about="#Wine" />
        <owl:Restriction>
          <owl:onProperty rdf:resource="#hasSugar" />
          <owl:hasValue rdf:resource="#Sweet" />
        </owl:Restriction>
      </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="SweetRiesling">
    <rdfs:subClassOf rdf:resource="#DessertWine" />
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasBody" />
        <owl:hasValue rdf:resource="#Full" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFlavor" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#Moderate" />
              <owl:Item rdf:resource="#Strong" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Riesling" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasSugar" />
        <owl:hasValue rdf:resource="#Sweet" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="StEmilion">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#Red" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFlavor" />
        <owl:hasValue rdf:resource="#Strong" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:hasValue rdf:resource="#CabernetSauvignonGrape" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Bordeaux" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#stEmilionRegion" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
<!-- PFPS this should really be a unionOf
     I think that this is a holdover from CLASSIC -->

  <owl:Class rdf:ID="SemillonOrSauvignonBlanc">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#White" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasBody" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#Medium" />
              <owl:Item rdf:resource="#Full" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#SemillonGrape" />
              <owl:Item rdf:resource="#SauvignonBlancGrape" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Semillon">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#SemillonOrSauvignonBlanc" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:hasValue rdf:resource="#SemillonGrape" />
      </owl:Restriction>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="SauvignonBlanc">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#SemillonOrSauvignonBlanc" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:hasValue rdf:resource="#SauvignonBlancGrape" />
      </owl:Restriction>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Sauterne">
    <rdfs:subClassOf rdf:resource="#LateHarvest" />
    <rdfs:subClassOf rdf:resource="#Bordeaux" />
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#SauterneRegion" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasBody" />
        <owl:hasValue rdf:resource="#Medium" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#White" />
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Sancerre">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasBody" />
        <owl:hasValue rdf:resource="#Medium" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasSugar" />
        <owl:hasValue rdf:resource="#OffDry" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFlavor" />
        <owl:hasValue rdf:resource="#Delicate" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:hasValue rdf:resource="#SauvignonBlancGrape" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Loire" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#sancerreRegion" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="RoseWine">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#rose" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Riesling">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#White" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:hasValue rdf:resource="#RieslingGrape" />
      </owl:Restriction>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="RedWine">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#Red" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="RedTableWine">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#TableWine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#Red" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="RedBurgundy">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:hasValue rdf:resource="#PinotNoirGrape" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Burgundy" />
      <owl:Class rdf:about="#RedWine" />
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="RedBordeaux">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#CabernetSauvignonGrape" />
              <owl:Item rdf:resource="#MerlotGrape" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Bordeaux" />
      <owl:Class rdf:about="#RedWine" />
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Port">
    <rdfs:subClassOf rdf:resource="#RedWine" />
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#PortugalRegion" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasBody" />
        <owl:hasValue rdf:resource="#Full" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFlavor" />
        <owl:hasValue rdf:resource="#Strong" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasSugar" />
        <owl:hasValue rdf:resource="#Sweet" />
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="PinotNoir">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#Red" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:hasValue rdf:resource="#PinotNoirGrape" />
      </owl:Restriction>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="PinotBlanc">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#White" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:hasValue rdf:resource="#PinotBlancGrape" />
      </owl:Restriction>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="PetiteSyrah">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#Red" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasSugar" />
        <owl:hasValue rdf:resource="#Dry" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFlavor" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#Moderate" />
              <owl:Item rdf:resource="#Strong" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasBody" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#Medium" />
              <owl:Item rdf:resource="#Full" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:hasValue rdf:resource="#petiteSyrahGrape" />
      </owl:Restriction>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Pauillac">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasBody" />
        <owl:hasValue rdf:resource="#Full" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFlavor" />
        <owl:hasValue rdf:resource="#Strong" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:hasValue rdf:resource="#CabernetSauvignonGrape" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Medoc" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#pauillacRegion" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Muscadet">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasBody" />
        <owl:hasValue rdf:resource="#Light" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFlavor" />
        <owl:hasValue rdf:resource="#Delicate" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasSugar" />
        <owl:hasValue rdf:resource="#Dry" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:hasValue rdf:resource="#PinotBlancGrape" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Loire" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#muscadetRegion" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Meursault">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasBody" />
        <owl:hasValue rdf:resource="#Full" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#WhiteBurgundy" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#meursaultRegion" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Merlot">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#Red" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasSugar" />
        <owl:hasValue rdf:resource="#Dry" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFlavor" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#Moderate" />
              <owl:Item rdf:resource="#Delicate" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasBody" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#Light" />
              <owl:Item rdf:resource="#Medium" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:hasValue rdf:resource="#MerlotGrape" />
      </owl:Restriction>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Meritage">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#Red" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#CabernetSauvignonGrape" />
              <owl:Item rdf:resource="#CabernetFrancGrape" />
              <owl:Item rdf:resource="#MalbecGrape" />
              <owl:Item rdf:resource="#PetiteVerdotGrape" />
              <owl:Item rdf:resource="#MerlotGrape" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:minCardinality>
          2
        </owl:minCardinality>
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <Region rdf:ID="MedocRegion">
    <locatedIn rdf:resource="#BordeauxRegion" />
  </Region>
  
  <owl:Class rdf:ID="Medoc">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#Red" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasSugar" />
        <owl:hasValue rdf:resource="#Dry" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Bordeaux" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#medocRegion" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Margaux">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFlavor" />
        <owl:hasValue rdf:resource="#Delicate" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:hasValue rdf:resource="#MerlotGrape" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Medoc" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#margauxRegion" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <Region rdf:ID="LoireRegion">
    <locatedIn rdf:resource="#FrenchRegion" />
  </Region>
  
  <owl:Class rdf:ID="Loire">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#LoireRegion" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="LateHarvest">
    <rdfs:subClassOf rdf:resource="#Wine" />
    <owl:disjointWith rdf:resource="#EarlyHarvest" />
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasSugar" />
        <owl:hasValue rdf:resource="#Sweet" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFlavor" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#Moderate" />
              <owl:Item rdf:resource="#Strong" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="ItalianWine">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#ItalianRegion" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <Region rdf:ID="ItalianRegion" />
  
  <owl:Class rdf:ID="IceWine">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasBody" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#Medium" />
              <owl:Item rdf:resource="#Full" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFlavor" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#Moderate" />
              <owl:Item rdf:resource="#Strong" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#LateHarvest" />
      <owl:Class rdf:about="#DessertWine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#White" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="GermanWine">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#germanyRegion" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Gamay">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:hasValue rdf:resource="#GamayGrape" />
      </owl:Restriction>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="FullBodiedWine">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasBody" />
        <owl:hasValue rdf:resource="#Full" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <Region rdf:ID="FrenchRegion" />
  
  <owl:Class rdf:ID="FrenchWine">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#FrenchRegion" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>

  <owl:Class rdf:ID="EarlyHarvest">
    <rdfs:subClassOf rdf:resource="#Wine" />
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasSugar" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#Dry" />
              <owl:Item rdf:resource="#OffDry" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="DryWine">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasSugar" />
        <owl:hasValue rdf:resource="#Dry" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="DryWhiteWine">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#DryWine" />
      <owl:Class rdf:about="#WhiteWine" />
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="DryRiesling">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#White" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFlavor" />
        <owl:hasValue rdf:resource="#Delicate" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasBody" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#Light" />
              <owl:Item rdf:resource="#Medium" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Riesling" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasSugar" />
        <owl:hasValue rdf:resource="#Dry" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="DryRedWine">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#DryWine" />
      <owl:Class rdf:about="#RedWine" />
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="DessertWine">
    <rdfs:subClassOf rdf:resource="#Wine" />
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasSugar" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#OffDry" />
              <owl:Item rdf:resource="#Sweet" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="CotesDOr">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFlavor" />
        <owl:hasValue rdf:resource="#Moderate" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#RedBurgundy" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#cotesDOrRegion" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Chianti">
    <rdfs:subClassOf rdf:resource="#ItalianWine" />
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#ChiantiRegion" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#Red" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:hasValue rdf:resource="#SangioveseGrape" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFlavor" />
        <owl:hasValue rdf:resource="#Moderate" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasSugar" />
        <owl:hasValue rdf:resource="#Dry" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasBody" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#Light" />
              <owl:Item rdf:resource="#Medium" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:Class rdf:ID="CheninBlanc">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#White" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFlavor" />
        <owl:hasValue rdf:resource="#Moderate" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasBody" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#Full" />
              <owl:Item rdf:resource="#Medium" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasSugar" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#Dry" />
              <owl:Item rdf:resource="#OffDry" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:hasValue rdf:resource="#CheninBlancGrape" />
      </owl:Restriction>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Chardonnay">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#White" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasBody" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#Full" />
              <owl:Item rdf:resource="#Medium" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFlavor" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#Strong" />
              <owl:Item rdf:resource="#Moderate" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:hasValue rdf:resource="#ChardonnayGrape" />
      </owl:Restriction>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <Region rdf:ID="CaliforniaRegion">
    <locatedIn rdf:resource="#UsRegion" />
  </Region>
  
  <Region rdf:ID="TexasRegion">
    <locatedIn rdf:resource="#UsRegion" />
  </Region>
  
  <owl:Class rdf:ID="CaliforniaWine">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#CaliforniaRegion" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="TexasWine">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#TexasRegion" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="CabernetSauvignon">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#Red" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasSugar" />
        <owl:hasValue rdf:resource="#Dry" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFlavor" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#Moderate" />
              <owl:Item rdf:resource="#Strong" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasBody" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
              <owl:Item rdf:resource="#Medium" />
              <owl:Item rdf:resource="#Full" />
            </owl:oneOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:hasValue rdf:resource="#CabernetSauvignonGrape" />
      </owl:Restriction>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="CabernetFranc">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#Red" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFlavor" />
        <owl:hasValue rdf:resource="#Moderate" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasBody" />
        <owl:hasValue rdf:resource="#Medium" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasSugar" />
        <owl:hasValue rdf:resource="#Dry" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:hasValue rdf:resource="#CabernetFrancGrape" />
      </owl:Restriction>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Burgundy">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#BourgogneRegion" />
      </owl:Restriction>
    </owl:intersectionOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasSugar" />
        <owl:hasValue rdf:resource="#Dry" />
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <Region rdf:ID="BourgogneRegion">
    <locatedIn rdf:resource="#FrenchRegion" />
  </Region>
  
  <Region rdf:ID="BordeauxRegion">
    <locatedIn rdf:resource="#FrenchRegion" />
  </Region>
  
  <owl:Class rdf:ID="Bordeaux">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#BordeauxRegion" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="Beaujolais">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#Red" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasBody" />
        <owl:hasValue rdf:resource="#Light" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasSugar" />
        <owl:hasValue rdf:resource="#Dry" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFlavor" />
        <owl:hasValue rdf:resource="#Delicate" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:hasValue rdf:resource="#GamayGrape" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#madeFromVarietal" />
        <owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#beaujolaisRegion" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <Region rdf:ID="AustralianRegion" />
  
  <owl:Class rdf:ID="Anjou">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasColor" />
        <owl:hasValue rdf:resource="#Rose" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasBody" />
        <owl:hasValue rdf:resource="#Light" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasFlavor" />
        <owl:hasValue rdf:resource="#Delicate" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#hasSugar" />
        <owl:hasValue rdf:resource="#OffDry" />
      </owl:Restriction>
    </rdfs:subClassOf>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Loire" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#anjouRegion" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="AmericanWine">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#UsRegion" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <owl:Class rdf:ID="AlsatianWine">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Wine" />
      <owl:Restriction>
        <owl:onProperty rdf:resource="#locatedIn" />
        <owl:hasValue rdf:resource="#alsaceRegion" />
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
  
  <WineBody rdf:ID="Full" />
  
  <WineBody rdf:ID="Medium" />
  
  <WineBody rdf:ID="Light" />
  
  <WineColor rdf:ID="Red" />
  
  <WineColor rdf:ID="Rose" />
  
  <WineColor rdf:ID="White" />
  
  <WineFlavor rdf:ID="Strong" />
  
  <WineFlavor rdf:ID="Moderate" />
  
  <WineFlavor rdf:ID="Delicate" />
  
  <WineSugar rdf:ID="Dry" />
  
  <WineSugar rdf:ID="OffDry">
    <owl:differentIndividualFrom rdf:resource="#Dry"/>
    <owl:differentIndividualFrom rdf:resource="#Sweet"/>
  </WineSugar>
  
  <WineSugar rdf:ID="Sweet">
    <owl:differentIndividualFrom rdf:resource="#Dry"/>
  </WineSugar>
  
  <Region rdf:ID="AlsaceRegion">   
    <locatedIn rdf:resource="#FrenchRegion" />
  </Region>

  <Region rdf:ID="AnjouRegion">
    <locatedIn rdf:resource="#LoireRegion" />
  </Region>
  
  <NonSweetFruit rdf:ID="Apples" />
  
  <Region rdf:ID="ArroyoGrandeRegion">
    <locatedIn rdf:resource="#CaliforniaRegion" />
  </Region>
  
  <Winery rdf:ID="Beringer" />

  <Winery rdf:ID="Bancroft" />
  
  <Chardonnay rdf:ID="BancroftChardonnay">
    <locatedIn rdf:resource="#NapaRegion" />
    <hasMaker  rdf:resource="#Bancroft" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Medium" />
  </Chardonnay>
  
  <Region rdf:ID="BeaujolaisRegion">
    <locatedIn rdf:resource="#FrenchRegion" />
  </Region>
  
  <Varietal rdf:ID="CabernetFrancGrape" />
  
  <Varietal rdf:ID="CabernetSauvignonGrape" />
  
  <Region rdf:ID="CentralCoastRegion">
    <locatedIn rdf:resource="#CaliforniaRegion" />
  </Region>
  
  <Varietal rdf:ID="ChardonnayGrape" />
  
  <Winery rdf:ID="ChateauChevalBlanc" />
  
  <StEmilion rdf:ID="ChateauChevalBlancStEmilion">
    <hasMaker  rdf:resource="#ChateauChevalBlanc" />
  </StEmilion>
  
  <Winery rdf:ID="ChateauDYchem" />
  
  <Sauterne rdf:ID="ChateauDYchemSauterne">
    <madeFromVarietal rdf:resource="#SauvignonBlancGrape" />
    <madeFromVarietal rdf:resource="#SemillonGrape" />
    <hasFlavor rdf:resource="#Strong" />
    <hasMaker  rdf:resource="#ChateauDYchem" />
  </Sauterne> 
  
  <Winery rdf:ID="ChateauDeMeursault" />
  
  <Meursault rdf:ID="ChateauDeMeursaultMeursault">
    <hasFlavor rdf:resource="#Moderate" />
    <hasMaker  rdf:resource="#ChateauDeMeursault" />
  </Meursault>
  
  <Winery rdf:ID="ChateauLafiteRothschild" />
  
  <Pauillac rdf:ID="ChateauLafiteRothschildPauillac">
    <hasMaker  rdf:resource="#ChateauLafiteRothschild" />
  </Pauillac>
  
  <Margaux rdf:ID="ChateauMargaux">
    <hasMaker  rdf:resource="#ChateauMargauxWinery" />
  </Margaux>
  
  <Winery rdf:ID="ChateauMargauxWinery" />
  
  <Winery rdf:ID="ChateauMorgon" />
  
  <Beaujolais rdf:ID="ChateauMorgonBeaujolais">
    <hasMaker  rdf:resource="#ChateauMorgon" />
  </Beaujolais>
  
  <Varietal rdf:ID="CheninBlancGrape" />

  <Varietal rdf:ID="ZinfandelGrape" />

  <Chianti rdf:ID="ChiantiClassico">
    <hasBody   rdf:resource="#Medium" />
    <hasMaker  rdf:resource="#McGuinnesso" />
  </Chianti>
  
  <Region rdf:ID="ChiantiRegion">
    <locatedIn rdf:resource="#ItalianRegion" />
  </Region>
  
  <Winery rdf:ID="ClosDeLaPoussie" />
  
  <Sancerre rdf:ID="ClosDeLaPoussieSancerre">
    <hasMaker  rdf:resource="#ClosDeLaPoussie" />
  </Sancerre>
  
  <Winery rdf:ID="ClosDeVougeot" />
  
  <CotesDOr rdf:ID="ClosDeVougeotCotesDOr">
    <hasMaker  rdf:resource="#ClosDeVougeot" />
  </CotesDOr>
  
  <Winery rdf:ID="CongressSprings" />
  
  <Semillon rdf:ID="CongressSpringsSemillon">
    <hasMaker  rdf:resource="#CongressSprings" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Medium" />
  </Semillon>

  <Winery rdf:ID="Corbans" />
  
  <Riesling rdf:ID="CorbansDryWhiteRiesling">
    <locatedIn rdf:resource="#NewZealandRegion" />
    <hasMaker  rdf:resource="#Corbans" />
    <hasSugar  rdf:resource="#OffDry" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Medium" />
  </Riesling>
  
  <SauvignonBlanc rdf:ID="CorbansPrivateBinSauvignonBlanc">
    <locatedIn rdf:resource="#NewZealandRegion" />
    <hasMaker  rdf:resource="#Corbans" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Strong" />
    <hasBody   rdf:resource="#Full" />
  </SauvignonBlanc>
  
  <SauvignonBlanc rdf:ID="CorbansSauvignonBlanc">
    <locatedIn rdf:resource="#NewZealandRegion" />
    <hasMaker  rdf:resource="#Corbans" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Strong" />
    <hasBody   rdf:resource="#Medium" />
  </SauvignonBlanc>
  
  <Winery rdf:ID="CortonMontrachet" />
  
  <WhiteBurgundy rdf:ID="CortonMontrachetWhiteBurgundy">
    <hasMaker  rdf:resource="#CortonMontrachet" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Strong" />
    <hasBody   rdf:resource="#Full" />
  </WhiteBurgundy>
  
  <Region rdf:ID="CotesDOrRegion">
    <locatedIn rdf:resource="#BourgogneRegion" />
  </Region>
  
  <Winery rdf:ID="Cotturi" />
  
  <Zinfandel rdf:ID="CotturiZinfandel">
    <locatedIn rdf:resource="#SonomaRegion" />
    <hasMaker  rdf:resource="#Cotturi" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Strong" />
    <hasBody   rdf:resource="#Full" />
  </Zinfandel>
  
  <Winery rdf:ID="DAnjou" />
  
  <Region rdf:ID="EdnaValleyRegion">
    <locatedIn rdf:resource="#CaliforniaRegion" />
  </Region>
  
  <Winery rdf:ID="Elyse" />
  
  <Zinfandel rdf:ID="ElyseZinfandel">
    <locatedIn rdf:resource="#NapaRegion" />
    <hasMaker  rdf:resource="#Elyse" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Full" />
  </Zinfandel>
  
  <Winery rdf:ID="Forman" />
  
  <CabernetSauvignon rdf:ID="FormanCabernetSauvignon">
    <locatedIn rdf:resource="#NapaRegion" />
    <hasMaker  rdf:resource="#Forman" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Strong" />
    <hasBody   rdf:resource="#Medium" />
  </CabernetSauvignon>
  
  <Chardonnay rdf:ID="FormanChardonnay">
    <locatedIn rdf:resource="#NapaRegion" />
    <hasMaker  rdf:resource="#Forman" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Full" />
  </Chardonnay>
  
  <Winery rdf:ID="Foxen" />
  
  <CheninBlanc rdf:ID="FoxenCheninBlanc">
    <locatedIn rdf:resource="#SantaBarbaraRegion" />
    <hasMaker  rdf:resource="#Foxen" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Full" />
  </CheninBlanc>
  
  <Varietal rdf:ID="GamayGrape" />
  
  <Winery rdf:ID="GaryFarrell" />
  
  <Merlot rdf:ID="GaryFarrellMerlot">
    <locatedIn rdf:resource="#SonomaRegion" />
    <hasMaker  rdf:resource="#GaryFarrell" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Medium" />
  </Merlot>
  
  <Region rdf:ID="GermanyRegion" />
  
  <Winery rdf:ID="Handley" />
  
  <Winery rdf:ID="KalinCellars" />
  
  <Semillon rdf:ID="KalinCellarsSemillon">
    <hasMaker  rdf:resource="#KalinCellars" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Strong" />
    <hasBody   rdf:resource="#Full" />
  </Semillon>
  
  <Winery rdf:ID="KathrynKennedy" />
  
  <Meritage rdf:ID="KathrynKennedyLateral">
    <hasMaker  rdf:resource="#KathrynKennedy" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Delicate" />
    <hasBody   rdf:resource="#Medium" />
  </Meritage>
  
  <Winery rdf:ID="LaneTanner" />
  
  <PinotNoir rdf:ID="LaneTannerPinotNoir">
    <locatedIn rdf:resource="#SantaBarbaraRegion" />
    <hasMaker  rdf:resource="#LaneTanner" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Delicate" />
    <hasBody   rdf:resource="#Light" />
  </PinotNoir>
  
  <Winery rdf:ID="Longridge" />
  
  <Merlot rdf:ID="LongridgeMerlot">
    <locatedIn rdf:resource="#NewZealandRegion" />
    <hasMaker  rdf:resource="#Longridge" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Light" />
  </Merlot>
  
  <Varietal rdf:ID="MalbecGrape" />
  
  <Region rdf:ID="MargauxRegion">
    <locatedIn rdf:resource="#MedocRegion" />
  </Region>
  
  <Winery rdf:ID="Marietta" />
  
  <CabernetSauvignon rdf:ID="MariettaCabernetSauvignon">
    <locatedIn rdf:resource="#SonomaRegion" />
    <hasMaker  rdf:resource="#Marietta" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Medium" />
  </CabernetSauvignon>
  
  <RedTableWine rdf:ID="MariettaOldVinesRed">
    <locatedIn rdf:resource="#SonomaRegion" />
    <hasMaker  rdf:resource="#Marietta" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Medium" />
  </RedTableWine>
  
  <PetiteSyrah rdf:ID="MariettaPetiteSyrah">
    <locatedIn rdf:resource="#SonomaRegion" />
    <hasMaker  rdf:resource="#Marietta" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Medium" />
  </PetiteSyrah>
  
  <Zinfandel rdf:ID="MariettaZinfandel">
    <locatedIn rdf:resource="#SonomaRegion" />
    <hasMaker  rdf:resource="#Marietta" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Medium" />
  </Zinfandel>
  
  <Winery rdf:ID="McGuinnesso" />
  
  <Region rdf:ID="MendocinoRegion">
    <locatedIn rdf:resource="#CaliforniaRegion" />
    <adjacentRegion rdf:resource="#SonomaRegion" />
  </Region>
  
  <Varietal rdf:ID="MerlotGrape" />
  
  <Region rdf:ID="MeursaultRegion">
    <locatedIn rdf:resource="#BourgogneRegion" />
  </Region>
  
  <Winery rdf:ID="MountEdenVineyard" />
  
  <Chardonnay rdf:ID="MountEdenVineyardEdnaValleyChardonnay">
    <locatedIn rdf:resource="#EdnaValleyRegion" />
    <hasMaker  rdf:resource="#MountEdenVineyard" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Medium" />
  </Chardonnay>
  
  <PinotNoir rdf:ID="MountEdenVineyardEstatePinotNoir">
    <locatedIn rdf:resource="#EdnaValleyRegion" />
    <hasMaker  rdf:resource="#MountEdenVineyard" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Strong" />
    <hasBody   rdf:resource="#Full" />
  </PinotNoir>
  
  <Winery rdf:ID="Mountadam" />
  
  <Chardonnay rdf:ID="MountadamChardonnay">
    <locatedIn rdf:resource="#SouthAustraliaRegion" />
    <hasMaker  rdf:resource="#Mountadam" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Strong" />
    <hasBody   rdf:resource="#Full" />
  </Chardonnay>
  
  <PinotNoir rdf:ID="MountadamPinotNoir">
    <locatedIn rdf:resource="#SouthAustraliaRegion" />
    <hasMaker  rdf:resource="#Mountadam" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Medium" />
  </PinotNoir>
  
  <DryRiesling rdf:ID="MountadamRiesling">
    <locatedIn rdf:resource="#SouthAustraliaRegion" />
    <hasMaker  rdf:resource="#Mountadam" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Delicate" />
    <hasBody   rdf:resource="#Medium" />
  </DryRiesling>
  
  <Region rdf:ID="MuscadetRegion">
    <locatedIn rdf:resource="#LoireRegion" />
  </Region>
  
  <Region rdf:ID="NapaRegion">
    <locatedIn rdf:resource="#CaliforniaRegion" />
  </Region>
  
  <Region rdf:ID="NewZealandRegion" />
  
  <Winery rdf:ID="PageMillWinery" />  

  <CabernetSauvignon rdf:ID="PageMillWineryCabernetSauvignon">
    <locatedIn rdf:resource="#NapaRegion" />
    <hasMaker  rdf:resource="#PageMillWinery" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Medium" />
  </CabernetSauvignon>
  
  <Region rdf:ID="PauillacRegion">
    <locatedIn rdf:resource="#MedocRegion" />
  </Region>
  
  <Winery rdf:ID="PeterMccoy" />
  
  <Chardonnay rdf:ID="PeterMccoyChardonnay">
    <locatedIn rdf:resource="#SonomaRegion" />
    <hasMaker  rdf:resource="#PeterMccoy" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Medium" />
  </Chardonnay>
  
  <Varietal rdf:ID="PetiteSyrahGrape" />
  
  <Varietal rdf:ID="PetiteVerdotGrape" />
  
  <Varietal rdf:ID="PinotBlancGrape" />
  
  <Varietal rdf:ID="PinotNoirGrape" />
  
  <Region rdf:ID="PortugalRegion" />
  
  <Winery rdf:ID="PulignyMontrachet" />
  
  <WhiteBurgundy rdf:ID="PulignyMontrachetWhiteBurgundy">
    <hasMaker  rdf:resource="#PulignyMontrachet" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Medium" />
  </WhiteBurgundy>
  
  <Varietal rdf:ID="RieslingGrape" />
  
  <Anjou rdf:ID="RoseDAnjou">
    <hasMaker  rdf:resource="#DAnjou" />
  </Anjou>
  
  <Region rdf:ID="SancerreRegion">
    <locatedIn rdf:resource="#LoireRegion" />
  </Region>
  
  <Varietal rdf:ID="SangioveseGrape" />
  
  <Region rdf:ID="SantaBarbaraRegion">
    <locatedIn rdf:resource="#CaliforniaRegion" />
  </Region>
  
  <Winery rdf:ID="SantaCruzMountainVineyard" />
  
  <CabernetSauvignon rdf:ID="SantaCruzMountainVineyardCabernetSauvignon">
    <locatedIn rdf:resource="#SantaCruzMountainsRegion" />
    <hasMaker  rdf:resource="#SantaCruzMountainVineyard" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Strong" />
    <hasBody   rdf:resource="#Full" />
  </CabernetSauvignon>
  
  <Region rdf:ID="CentralTexasRegion">
    <locatedIn rdf:resource="#TexasRegion" />
  </Region>

  <Winery rdf:ID="StGenevieve" />

  <WhiteWine rdf:ID="StGenevieveTexasWhite">
    <locatedIn rdf:resource="#CentralTexasRegion" />
    <hasMaker  rdf:resource="#StGenevieve" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Moderate" />
  </WhiteWine>

  <Region rdf:ID="SantaCruzMountainsRegion">
    <locatedIn rdf:resource="#CaliforniaRegion" />
  </Region>
  
  <Winery rdf:ID="SaucelitoCanyon" />
  
  <Zinfandel rdf:ID="SaucelitoCanyonZinfandel">
    <locatedIn rdf:resource="#ArroyoGrandeRegion" />
    <hasMaker  rdf:resource="#SaucelitoCanyon" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Medium" />
  </Zinfandel>
  
  <Zinfandel rdf:ID="SaucelitoCanyonZinfandel1998">
    <locatedIn rdf:resource="#ArroyoGrandeRegion" />
    <hasVintageYear rdf:resource="#Year1998" />
    <hasMaker  rdf:resource="#SaucelitoCanyon" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Medium" />
  </Zinfandel>

  <Region rdf:ID="SauterneRegion">
    <locatedIn rdf:resource="#BordeauxRegion" />
  </Region>
  
  <Varietal rdf:ID="SauvignonBlancGrape" />
  
  <Winery rdf:ID="SchlossRothermel" />
  
  <SweetRiesling rdf:ID="SchlossRothermelTrochenbierenausleseRiesling">
    <locatedIn rdf:resource="#GermanyRegion" />
    <hasMaker  rdf:resource="#SchlossRothermel" />
    <hasSugar  rdf:resource="#Sweet" />
    <hasFlavor rdf:resource="#Strong" />
    <hasBody   rdf:resource="#Full" />
  </SweetRiesling>
  
  <Winery rdf:ID="SchlossVolrad" />
  
  <SweetRiesling rdf:ID="SchlossVolradTrochenbierenausleseRiesling">
    <locatedIn rdf:resource ="#GermanyRegion" />
    <hasMaker  rdf:resource="#SchlossVolrad" />
    <hasSugar  rdf:resource="#Sweet" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Full" />
  </SweetRiesling>
  
  <Winery rdf:ID="SeanThackrey" />
  
  <PetiteSyrah rdf:ID="SeanThackreySiriusPetiteSyrah">
    <locatedIn rdf:resource="#NapaRegion" />
    <hasMaker  rdf:resource="#SeanThackrey" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Strong" />
    <hasBody   rdf:resource="#Full" />
  </PetiteSyrah>
  
  <Winery rdf:ID="Selaks" />
  
  <IceWine rdf:ID="SelaksIceWine">
    <locatedIn rdf:resource="#NewZealandRegion" />
    <hasMaker  rdf:resource="#Selaks" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Medium" />
    <color rdf:resource="#White" />
  </IceWine>
  
  <SauvignonBlanc rdf:ID="SelaksSauvignonBlanc">
    <locatedIn rdf:resource="#NewZealandRegion" />
    <hasMaker  rdf:resource="#Selaks" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Medium" />
  </SauvignonBlanc>
  
  <Varietal rdf:ID="SemillonGrape" />
  
  <Winery rdf:ID="SevreEtMaine" />
  
  <Muscadet rdf:ID="SevreEtMaineMuscadet">
    <hasMaker  rdf:resource="#SevreEtMaine" />
  </Muscadet>
  
  <Region rdf:ID="SonomaRegion">
    <locatedIn rdf:resource="#CaliforniaRegion" />
  </Region>
  
  <Region rdf:ID="SouthAustraliaRegion">
    <locatedIn rdf:resource="#AustralianRegion" />
  </Region>
  
  <Region rdf:ID="StEmilionRegion">
    <locatedIn rdf:resource="#BordeauxRegion" />
  </Region>
  
  <Winery rdf:ID="Stonleigh" />
  
  <SauvignonBlanc rdf:ID="StonleighSauvignonBlanc">
    <locatedIn rdf:resource="#NewZealandRegion" />
    <hasMaker  rdf:resource="#Stonleigh" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Delicate" />
    <hasBody   rdf:resource="#Medium" />
  </SauvignonBlanc>
  
  <Winery rdf:ID="Taylor" />
  
  <Port rdf:ID="TaylorPort">
    <hasMaker  rdf:resource="#Taylor" />
  </Port>
  
  <Region rdf:ID="ToursRegion">
    <locatedIn rdf:resource="#LoireRegion" />
  </Region>
  
  <Winery rdf:ID="Ventana" />
  
  <CheninBlanc rdf:ID="VentanaCheninBlanc">
    <locatedIn rdf:resource="#CentralCoastRegion" />
    <hasMaker  rdf:resource="#Ventana" />
    <hasSugar  rdf:resource="#OffDry" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Medium" />
  </CheninBlanc>
  
  <Winery rdf:ID="WhitehallLane" />
  
  <CabernetFranc rdf:ID="WhitehallLaneCabernetFranc">
    <locatedIn rdf:resource="#NapaRegion" />
    <hasMaker  rdf:resource="#WhitehallLane" />
    <hasSugar  rdf:resource="#Dry" />
    <hasFlavor rdf:resource="#Moderate" />
    <hasBody   rdf:resource="#Medium" />
  </CabernetFranc>
  
  <DessertWine rdf:ID="WhitehallLanePrimavera">
    <locatedIn rdf:resource="#NapaRegion" />
    <hasSugar  rdf:resource="#Sweet" />
    <hasFlavor rdf:resource="#Delicate" />
    <hasBody   rdf:resource="#Light" />
  </DessertWine>
  
</rdf:RDF>
Received on Thursday, 31 October 2002 21:16:57 GMT

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