I'm trying to model some lexical data using OWL 2 (DL, using Protege). My main class is "Lemma", which has a number of axioms (using Manchester syntax):
Every Lemma hasLanguage some Language.
Every Lemma hasEtymology some Etymology.
Every Lemma hasMorphology some Morphology.
etc.
I also have a class VariantLemma, which is basically a variant spelling of the original lemma, but it will always have the same language and etymology as its parent Lemma, but can have different morphology. I originally modelled it as being equivalent to:
Lemma and (isVariantOf some Lemma)
but how can I state that it'll have the same values as its parent lemma for all axioms except Morphology? Can I use property chains in some way?
Thanks for any advice!
You can do this. In the situation that you have the
isVariantOf hasLanguage
lemma2 ---------------> lemma1 ---------------> language1
then you want to infer an additional propertty:
hasLanguage
lemma2 ---------------> language1
Since you can find a path in the first graph from lemma2 to language1, you assert that the second graph must exist by the following subproperty chain axiom. You need to do the same for the other properties, too, of course.
isVariantOf o hasLanguage SubPropertyOf hasLanguage
When you have an OWL reasoner and these axioms, then if you have assertions that about lem1, and that lem2 isVariantOf lem1, you'll see the inferred properties for lem2. Here's a lem1 and its properties in Protégé:
With the Pellet reasoner attached, the hasEtymology and hasLanguage properties are inferred for lem2 (shown with a yellow background):
Here's the OWL ontology, if you're interested:
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns="http://www.example.org/lemmata#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<owl:Ontology rdf:about="http://www.example.org/lemmata"/>
<owl:Class rdf:about="http://www.example.org/lemmata#Morphology"/>
<owl:Class rdf:about="http://www.example.org/lemmata#VariantLemma">
<owl:equivalentClass>
<owl:Class>
<owl:intersectionOf rdf:parseType="Collection">
<owl:Class rdf:about="http://www.example.org/lemmata#Lemma"/>
<owl:Restriction>
<owl:onProperty>
<owl:ObjectProperty rdf:about="http://www.example.org/lemmata#isVariantOf"/>
</owl:onProperty>
<owl:someValuesFrom rdf:resource="http://www.example.org/lemmata#Lemma"/>
</owl:Restriction>
</owl:intersectionOf>
</owl:Class>
</owl:equivalentClass>
</owl:Class>
<owl:Class rdf:about="http://www.example.org/lemmata#Language"/>
<owl:Class rdf:about="http://www.example.org/lemmata#Etymology"/>
<owl:ObjectProperty rdf:about="http://www.example.org/lemmata#hasEtymology">
<owl:propertyChainAxiom rdf:parseType="Collection">
<rdf:Description>
<owl:inverseOf rdf:resource="http://www.example.org/lemmata#isVariantOf"/>
</rdf:Description>
<owl:ObjectProperty rdf:about="http://www.example.org/lemmata#hasEtymology"/>
</owl:propertyChainAxiom>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:about="http://www.example.org/lemmata#hasLanguage">
<owl:propertyChainAxiom rdf:parseType="Collection">
<rdf:Description>
<owl:inverseOf rdf:resource="http://www.example.org/lemmata#isVariantOf"/>
</rdf:Description>
<owl:ObjectProperty rdf:about="http://www.example.org/lemmata#hasLanguage"/>
</owl:propertyChainAxiom>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:about="http://www.example.org/lemmata#hasMorphology"/>
</rdf:RDF>
来源:https://stackoverflow.com/questions/17173081/owl2-modelling-a-subclass-with-one-different-axiom