A small ontology about wine

The OWL 1.0 Guide gives a small ontology example. The RDF/XML+OWL statements are included at the end of this document. An exact translation in the (FT) notation is proposed now, accompanied by an UML translation from the authors of the example (this UML translation is incomplete: it does not show that the three relations (or "properties") specialize a same relation called vin#hasSubArea; onthe other hand, the "part-of" meaning conveyed by the black arrows is left implicit in the RDF/XML source).
This ontology may make sense as a data model but not for knowledge representation, sharing and retrieval retrieval purposes (which are the purposes of RDF/XML and OWL; conversely, they is no much point in translating data models in RDF/XML since the data will still remain accessible only by business-to-business purpose-built wrappers).


/*  '>' means "has for subtype", 
    '^' means "has for type", 
    '-' means "has for inverse",
'(*,*)' means "from anything to anything",
'<-' means the inverse relation is functional
*/

vin#ProductionArea
 > vin#Country vin#Region vin#Vineyard;

vin#hasSubArea (*,*)
 ^ owl#TransitiveProperty,
 - vin#subAreaOf,
 > vin#hasRegion vin#hasSubRegion
                 vin#hasVineyard;

   vin#hasRegion (vin#Country <- vin#Region)
    - vin#regionOf;

   vin#hasSubRegion (vin#Region<- vin#Region)
     - vin#subRegionOf;

   vin#hasVineyard (vin#Region<-vin#Vineyard)
     - vin#vineyardRegion;


/* Examples of application:
   (':' means "has for instance"):

vin#Country: vin#France vin#Italy;
vin#Region: vin#Aquitaine vin#Roussillon;
vin#Vineyard: vin#Chateau_Margaux;

[vin#Chateau_Margaux,
    vin#vineyardRegion: vin#Aquitaine];
*/


Revision 1: correcting lexical decisions

The existence of inverse relations and the presence of "has" or "of" in a relation name were probably prompted by the inadequacies of the RDF/XML syntax. They are not required in any other textual knowledge representation format, nor in a graphical format or for a model. Inverse relations only increase the complexity of the model and also logical inferencing. The presence of "has" or "of" in the identifiers contradicts the usual reading conventions of semantic networks, and make the use of these identifiers in other notations (e.g. controlled languages or natural languages) more difficult. The use of the intercap style is also a bad lexical decision with respect to this last point. Hence, the following version.

vin#production_area > vin#country vin#region vin#vineyard;

vin#sub_area (*,*)  ^ owl#transitive_property,
 > vin#region vin#sub_region  vin#vineyard;

   vin#region (vin#country <- vin#region);

   vin#sub_region (vin#region <- vin#region);

   vin#vineyard (vin#region <- vin#vineyard);


Revision 2: correcting structural decisions

The above ontology schema is extremely restricting (it only permits to state sub_area relations), semantically shallow and hard to extend or re-use. The following version follows a classic and scalable approach, e.g. "wine production" is a process and processes have many well-known simple relations associated to them (place, object, time, duration, ...) which people may use when they want to without introducing new objects (which would defeat knowledge re-trievablility and re-use). Dividing the sub_area relation into three subtypes also serves no purpose; using a simple partOf relation is no more ambiguous (the advantage is that many notations and systems have shortcuts to enter, present or handle part-of relations).

vin#location > vin#country vin#region vin#vineyard;
vin#production < vin#process;
vin#wine < vin#physical_object;

vin#object (vin#process,vin#liter_of_wine);
vin#place (vin#process,vin#location);
vin#time (vin#process,vin#time);
vin#part (vin#location,vin#location) ^ owl#transitive_property;

/* Examples of application ('p' means "has for part"):
vin#France    < vin#country,  p vin#Aquitaine;
vin#Aquitaine < vin#Region,   p vin#Chateau_Margaux;

[some vin#production,  vin#place: vin#Chateau_Margaux,  vin#time: 2003, 
                       object: some vin#wine];
*/


Revision 3: connecting to a large ontology (or in this case, removing the above ontology)

Although easier to connect to other ontologies, until this is done, the above version is still semantically shallow and not re-usable by automatic agents (unless they are purpose-built). Knowledge in isolation is just data. Since all the classes of this ontology are quite general and can be found in natural language ontologies, connected with many other classes, it is best for knowledge representation, sharing and retrieval purposes to use these concepts directly. To understand it, consider the following statements and click on the used classes to access related classes and statements in our extension, correction and application of WordNet.


user vin http://www.vin.com ;  //permits to enter the following statements in WebKB

vin#Chateau_Margaux < #region,  l #Aquitaine;
//There is currently no Chateau_Margaux in our extension of WordNet, so we have
//to add it before entering the next statement. Unless this document has already
//been parsed, you have to ask WebKB to parse the above statement (and add it to
//the  knowledge base) by clicking here if you then want to browse from the 
//category vin#Chateau_Margaux via the hyperlink below.

[some #production, pm#place: vin#Chateau_Margaux,   pm#time: 2003, 
                   pm#object: (some #Bordeaux_wine, #volume: 20000 #liter)
]; //according to the user "vin"


The OWL compliant RDF/XML original source

Classes (translation in FT:   vin#ProductionArea > vin#Country vin#Region vin#Vineyard)

<owl:Class rdf:ID="&vin;ProductionArea"/ > <owl:Class rdf:ID="&vin;Country"> <rdfs:subClassOf rdf:resource="&vin;ProductionArea"/> </owl:Class> <owl:Class rdf:ID="&vin;Region"> <rdfs:subClassOf rdf:resource="&vin;ProductionArea"/> </owl:Class> <owl:Class rdf:ID="&vin;Vineyard"> <rdfs:subClassOf rdf:resource="&vin;ProductionArea"/> </owl:Class>

Relations

<owl:ObjectProperty rdf:ID="&vin;hasSubArea"> <rdf:type rdf:resource="&owl;TransitiveProperty" /> </owl:ObjectProperty> <owl:ObjectProperty rdf:ID="&vin;subAreaOf"> <owl:inverseOf rdf:resource="&vin;hasSubArea"/> </owl:ObjectProperty> <owl:ObjectProperty rdf:ID="&vin;hasRegion"> <rdfs:subPropertyOf rdf:resource="&vin;hasSubArea"/> <owl:domain rdf:resource="&vin;Region"/> </owl:ObjectProperty> <owl:ObjectProperty rdf:ID="&vin;regionOf"> <rdf:type rdf:resource="&owl;FunctionalProperty" /> <owl:inverseOf rdf:resource="&vin;hasRegion"/> <owl:range rdf:resource="&vin;Country"/> </owl:ObjectProperty> <owl:ObjectProperty rdf:ID="&vin;hasSubRegion"> <rdfs:subPropertyOf rdf:resource="&vin;hasSubArea"/> <owl:range rdf:resource="&vin;Region"/> </owl:ObjectProperty> <owl:ObjectProperty rdf:ID="&vin;subRegionOf"> <owl:inverseOf rdf:resource="&vin;hasSubRegion"/> <owl:range rdf:resource="&vin;Region"/> <rdf:type rdf:resource="&owl;FunctionalProperty" /> </owl:ObjectProperty> <owl:ObjectProperty rdf:ID="&vin;hasVineyard"> <rdfs:subPropertyOf rdf:resource="&vin;hasSubArea"/> <owl:range rdf:resource="&vin;Vineyard"/> </owl:ObjectProperty> <owl:ObjectProperty rdf:ID="&vin;vineyardRegion"> <owl:inverseOf rdf:resource="&vin;hasVineyard"/> <owl:range rdf:resource="&vin;Region"/> <rdf:type rdf:resource="&owl;FunctionalProperty" /> </owl:ObjectProperty>

Philippe A. MARTIN