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