- From: Michael Daconta <mike@daconta.net>
- Date: Sat, 7 Feb 2004 11:36:13 -0700
- To: <www-rdf-interest@w3.org>
- Message-Id: <20040207183621.LAZV11482.fed1mtao07.cox.net@MIKESOFFICE>
Hi All,
I am working on an OWL Wordnet Metamodel that models synsets as classes.
Most of the other work on this models Wordnet with a lexical strategy (types
of words) except for the Web KB 2 project (which is an RDFS model). My work
will be an extension of the metamodel used in the Web KB project.
Here is a sample:
<owl:Class rdf:ID='causal_agent'>
<rdfs:isDefinedBy>any entity that causes events to
happen</rdfs:isDefinedBy>
<rdfs:label xml:lang='en'>causal agent</rdfs:label>
<rdfs:label xml:lang='en'>cause</rdfs:label>
<rdfs:label xml:lang='en'>causal agency</rdfs:label>
<rdfs:subClassOf>
<owl:Class rdf:about='#entity' />
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:ID='person'>
<rdfs:isDefinedBy>a human being; "there was too much for one
person to do"</rdfs:isDefinedBy>
<rdfs:label xml:lang='en'>person</rdfs:label>
<rdfs:label xml:lang='en'>individual</rdfs:label>
<rdfs:label xml:lang='en'>someone</rdfs:label>
<rdfs:label xml:lang='en'>somebody</rdfs:label>
<rdfs:label xml:lang='en'>mortal</rdfs:label>
<rdfs:label xml:lang='en'>human</rdfs:label>
<rdfs:label xml:lang='en'>soul</rdfs:label>
<rdfs:subClassOf>
<owl:Class rdf:about='#organism' />
</rdfs:subClassOf>
<rdfs:subClassOf>
<owl:Class rdf:about='#causal_agent' />
</rdfs:subClassOf>
</owl:Class>
Ok, so classes and subclasses are the easy part. Today I tackled the
meronyms (part). The key problem is that "part" should be a property of a
Class that is allowed multiple times and has a range of other Wordnet
classes.
Here are the two methods I tried:
Method #1
---------
<owl:ObjectProperty rdf:ID='part'>
<rdf:type rdf:resource="&owl;TransitiveProperty" />
<rdfs:domain rdf:resource='#cell'/>
<rdfs:range rdf:resource='#cell_wall'/>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID='part'>
<rdf:type rdf:resource="&owl;TransitiveProperty" />
<rdfs:domain rdf:resource='#cell'/>
<rdfs:range rdf:resource='#cytoplasm'/>
</owl:ObjectProperty>
Result: Unable to load into protege (duplicate "part"). In OWL Full we are
supposed to be able to model classes as individuals (which I think is what I
want). So, how would I model the above in OWL Full?
The other route is to make Part a subclass of Association and create Part
Individuals. This is method 2.
Method #2
---------
<owl:Class rdf:ID='Association' />
<owl:ObjectProperty rdf:ID='source'>
<rdfs:domain rdf:resource='#Association'/>
<rdfs:range rdf:resource='http://www.w3.org/2002/07/owl#Class'/>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID='target'>
<rdfs:domain rdf:resource='#Association'/>
<rdfs:range rdf:resource='http://www.w3.org/2002/07/owl#Class'/>
</owl:ObjectProperty>
<owl:Class rdf:ID='Part'>
<rdfs:subClassOf>
<owl:Class rdf:about='#Association' />
</rdfs:subClassOf>
</owl:Class>
...
<Part rdf:ID='part-1'>
<source rdf:resource='#cell'/>
<target rdf:resource='#cell_wall'/>
</Part>
<Part rdf:ID='part-2'>
<source rdf:resource='#cell'/>
<target rdf:resource='#cytoplasm'/>
</Part>
Result: successfully loads into protege
While I can live with Parts as individuals, I would have preferred to model
them as a repeating property of the specific Wordnet Class.
Suggestions appreciated,
- Mike
----------------------------
Michael C. Daconta
Chief Scientist, APG, McDonald Bradley, Inc.
www.daconta.net
Received on Saturday, 7 February 2004 13:36:25 UTC