我正在尝试构建一个本体来推断有关领域分类和术语的一些信息,但我遇到了一些概念上的困难。
让我解释一下这个问题。在 Protègè 4.1 中,我创建了 Thing 的 6 个子类:Concept、conceptTitle、ConceptSynonym(用于分类)和 Term、TermTitle、TermSynonym(用于术语)。我还创建了 hasConceptTitle、hasConceptSynonym、hasTermTitle 和 hasTermSynonym 对象关系(带有一些约束),表示每个概念都有一个(且仅有一个)标题,并且可能有一些同义词,并且每个术语都有一个(且仅有一个)标题,并且一些同义词。 Concept 和 Term 还有另一种关系 isA,赋予分类 DAG/树结构,而术语具有点阵结构(换句话说,一个术语可能是多个术语的子类)。
问题来了:我想创建一个 Concept 的子类,比如说“MappedConcept”),它应该是映射概念的集合,即标题等于术语标题的概念集合,或者它具有等于术语标题的同义词或具有等于术语同义词的同义词。 在一阶逻辑中,该集合可以表示为:
∀x∃y( ∃z((hasConceptTitle(x,z) ∧ hasTermTitle(y,z)) ∨
∃z((hasConceptTitle(x,z) ∧ hasTermSynonym(y,z)) ∨
∃z((hasConceptSynonym(x,z) ∧ hasTermTitle(y,z)) ∨
∃z((hasConceptSynonym(x,z) ∧ hasTermSynonym(y,z)) )
我怎样才能得到这个?定义“ConceptTitle”、“ConceptSynonym”、“TermTitle”和“TermSynonym”的数据属性?以及如何描述字符串匹配? 也许这 4 个类应该只是 Concept 和 Term 类的数据属性? 我读了好几遍Matthew Horridge的实用指南,但我无法将我脑海中的实用想法转化为Protègè的ongology。
提前致谢。
最佳答案
恐怕您无法在 OWL 2 DL 或 Protégé(OWL 2 DL 的编辑器)中执行此操作,因为据我所知,似乎有必要引入数据类型属性的逆,这在 OWL 2 DL 中被禁止。然而,在 OWL Full 中这是可能的,一些深度学习推理机甚至可以处理它。在这里,在 Turtle 中:
<MappedConcept> a owl:Class;
owl:equivalentTo [
a owl:Class;
owl:unionOf (
[
a owl:Restriction;
owl:onProperty <hasConceptTitle>;
owl:someValuesFrom [
a owl:Restriction;
owl:onProperty [ owl:inverseOf <hasTermTitle> ];
owl:someValuesFrom <Term>
]
] [
a owl:Restriction;
owl:onProperty <hasConceptTitle>;
owl:someValuesFrom [
a owl:Restriction;
owl:onProperty [ owl:inverseOf <hasTermSynonym> ];
owl:someValuesFrom <Term>
]
] [
a owl:Restriction;
owl:onProperty <hasConceptSynonym>;
owl:someValuesFrom [
a owl:Restriction;
owl:onProperty [ owl:inverseOf <hasTermSynonym> ];
owl:someValuesFrom <Term>
]
] [
a owl:Restriction;
owl:onProperty <hasConceptSynonym>;
owl:someValuesFrom [
a owl:Restriction;
owl:onProperty [ owl:inverseOf <hasTermTitle> ];
owl:someValuesFrom <Term>
]
]
)
] .
您也可以在没有 OWL 的情况下完成此操作,例如使用规则语言。这些规则将更接近您在编程语言中的做法。在 SWRL 中:
hasConceptTitle(?x,?z), hasTermTitle(?y,?z) -> MappedConcept(?x)
hasConceptTitle(?x,?z), hasTermSynonym(?y,?z) -> MappedConcept(?x)
hasConceptSynonym(?x,?z), hasTermTitle(?y,?z) -> MappedConcept(?x)
hasConceptSynonym(?x,?z), hasTermSynonym(?y,?z) -> MappedConcept(?x)
关于string-matching - 如何将一阶逻辑语句翻译成Protègè中带有字符串匹配的限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13916330/