3

我使用 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 . }

之间的相同属性?换句话说就是对象属性由其域和范围的子类继承。感谢您提供的任何帮助。DiseaseTuberculosisSymptom

4

1 回答 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 回答