我使用 Protege 5.2.0 开发了一个关于胸部疾病的阿拉伯语本体,该本体有一个 classDisease
和一个 class Symptom
。前两个类之间的对象属性是has_symptom
它的域是什么Disease
,范围是什么Symptom
。现在我有一个类的子类Disease
,即Tuberculosis
.
现在我可以查询本体以获取类Tuberculosis
和类之间的对象属性,Symptom
请参阅以下查询:我是否应该获得在作为超类的类和类
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX my: <http://www.semanticweb.org/ali/ontologies/2017/2/CDDOnto#>
SELECT ?property
WHERE {
?property rdfs:domain my:Tuberculosis ;
rdfs:range my:Symptom .
}
之间的相同属性?换句话说就是对象属性由其域和范围的子类继承。感谢您提供的任何帮助。Disease
Tuberculosis
Symptom
问问题
454 次
1 回答
1
不,将my:Tuberculosis rdfs:subClassOf my:Disease
公理引入您的数据集并不意味着my:has_symptom rdfs:domain my:Tuberculosis
.
您可以通过查找属性my:Tuberculosis
域的子类来查询属性。以下查询应检索其域是my:Tuberculosis
.
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX my: <http://www.semanticweb.org/ali/ontologies/2017/2/CDDOnto#>
SELECT ?property
WHERE {
?property rdfs:domain/(rdfs:subClassOf^)* my:Tuberculosis ;
rdfs:range my:Symptom .
}
根据您定义本体的方式(即:您是否使用猫头鹰公理?),您最好使用猫头鹰推理器。例如,如果您的类层次结构包含任何联合或交集公理,则上述查询将不够“智能”以遵循它们。
于 2018-03-30T13:52:05.630 回答