我有三元组说患者P
参加了医疗保健遭遇E
,其输出M
,一种药物处方。处方可以mention
来自药物本体论或DrOn的药物。
在这种情况下,让我们说M1
提到降低胆固醇的药物阿托伐他汀,它是从ChEBI导入DrOn的http://purl.obolibrary.org/obo/CHEBI_39548:
prefix obo: <http://purl.obolibrary.org/obo/>
:M1 obo:IAO_0000142 obo:CHEBI_39548 .
ChEBI有一个公理:obo:CHEBI_39548具有http://purl.obolibrary.org/obo/CHEBI_35821的作用,&#34;抗胆固醇药物&#34;。这使得很容易找到服用阿托伐他汀的患者,或其他具有相同作用的药物。
不幸的是,DrOn为某些药物创建了自己的术语,而不是从ChEBI中导入它们。例如,另一种降胆固醇药物罗苏伐他汀被建模为http://purl.obolibrary.org/obo/DRON_00018679而不是http://purl.obolibrary.org/obo/CHEBI_38545。 ChEBI对瑞舒伐他汀的术语也用obo:CHEBI_39548作用注释,但obo:DRON_00018679不是。因此,我的数据集中使用罗苏伐他汀的患者不会出现在我现有的基于角色的查询中。
我在GraphDB RDFS-plus存储库中有这些数据,我现在不想改变推理级别。如果它是OWL存储库,我只想说
obo:CHEBI_38545 owl:equivalentClass obo:DRON_00018679
我可以使用RDFS或GraphDB自定义规则集进行类似的操作吗?
答案 0 :(得分:3)
如果是OWL存储库,我只想说
obo:CHEBI_38545 owl:equivalentClass obo:DRON_00018679
我可以使用RDFS或GraphDB自定义规则集进行类似的操作吗?
<强>第一强>
您显然可以将owl:equivalentClass
替换为两个互惠rdfs:subClassOf
。至于这些配方的等价性,我认为这是相关的:
<强>第二强>
owl:equivalentClass
已经在RDFS-Plus中。
从第一版语义Web工作本体论者的第7章开始,首先介绍了RDFS-Plus:
使用构造
owl:equivalentClass
,RDFS-Plus提供了更直观的类等价表达。
在GraphDB中, RDFS-Plus 和 RDFS-Plus(优化)规则集支持owl:equivalentClass
。 builtin_rdfsPlus-optimized.pie
文件中有以下规则:
Id: owl_EquivClassBySubClass
a <rdfs:subClassOf> b [Constraint b != a]
b <rdfs:subClassOf> a [Cut]
------------------------------------
a <owl:equivalentClass> b
以及以下公理:
<owl:equivalentClass> <rdf:type> <owl:TransitiveProperty>
<owl:equivalentClass> <rdf:type> <owl:SymmetricProperty>
<owl:equivalentClass> <rdfs:subPropertyOf> <rdfs:subClassOf>
在较高的配置文件中,使用两个规则:
Id: scm_eqc1
c1 <owl:equivalentClass> c2 [Constraint c1 != c2 ]
-------------------------------
c1 <rdfs:subClassOf> c2
c2 <rdfs:subClassOf> c1
Id: scm_eqc2
c1 <rdfs:subClassOf> c2 [Constraint c1 != c2 ]
c2 <rdfs:subClassOf> c1
-------------------------------
c1 <owl:equivalentClass> c2
答案 1 :(得分:1)
当我在RDFS + GraphDB回购中使用@StanislavKralin的互惠rdfs:subClassOf
appraoch时...
:x
的实例:y
插入关于类:z
和:x
的一些三元组:x
和:y
是彼此的子类
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix : <http://localhost/>
insert data {
:x a owl:Class .
:y a owl:Class .
:z a :x .
:x rdfs:subClassOf :y .
:y rdfs:subClassOf :x .
}
然后查询有关:x
,:y
和:z
select * where {
?s ?p ?o .
filter(regex(str(?s), "localhost"))
}
order by ?s ?p ?o
我免费获得owl:equivalentClass
!
+----+---------------------+-----------+
| s | p | o |
+----+---------------------+-----------+
| :x | rdf:type | owl:Class |
| :x | rdfs:subClassOf | :x |
| :x | rdfs:subClassOf | :y |
| :x | owl:equivalentClass | :x |
| :x | owl:equivalentClass | :y |
| :y | rdf:type | owl:Class |
| :y | rdfs:subClassOf | :x |
| :y | rdfs:subClassOf | :y |
| :y | owl:equivalentClass | :x |
| :y | owl:equivalentClass | :y |
| :z | rdf:type | :x |
| :z | rdf:type | :y |
+----+---------------------+-----------+