我正在尝试从具有成分的药物本体中获取实体,使用限制如下
OBI_0000576
'分散的分子聚集体'BFO_0000053
'是'的承载者BFO_0000071
'有颗粒部分'
但没有指定质量 ( PATO_0000125
)。例如“对乙酰氨基酚/氢可酮口服片剂”
http://purl.obolibrary.org/obo/DRON_00020585,但不是“对乙酰氨基酚 230 毫克/氢可酮 5 毫克口服片剂” http://purl.obolibrary.org/ obo/DRON_00038671
我已经通过两个先前开发的查询将其实现为减号操作
我已经养成了将 owl 限制称为空白节点的习惯,而不是给它们变量
此查询运行缓慢(在具有 SSD 和 64 GB RAM 的服务器上运行 45 分钟)。我想将查询合并在一起并过滤掉指定质量的模式。我想我需要指定rdf:rest
提及质量的交集,在可选的 {} 子句中使用变量,然后过滤该变量未绑定的情况。
我看不到如何在 [] 空白节点表示法中做到这一点?可能吗?
PREFIX obo: <http://purl.obolibrary.org/obo/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?d ?dl
where {
{
?d rdfs:label ?dl ;
rdfs:subClassOf [ owl:onProperty <http://www.obofoundry.org/ro/ro.owl#has_proper_part> ;
owl:someValuesFrom [ owl:intersectionOf [ rdf:first
obo:OBI_0000576 ;
rdf:rest [ rdf:first [ owl:onProperty obo:BFO_0000053 ] ;
rdf:rest [ rdf:first [ owl:onProperty
obo:BFO_0000071 ;
owl:someValuesFrom ?c ] ] ] ] ] ] .
} minus {
?prod rdfs:label ?l ;
rdfs:subClassOf [ owl:someValuesFrom [ owl:intersectionOf [ rdf:rest [ rdf:rest [ rdf:first [ owl:onProperty obo:BFO_0000053 ;
owl:someValuesFrom [ owl:intersectionOf [ rdf:first <http://purl.obolibrary.org/obo/PATO_0000125> ] ] ] ] ] ] ] ] .
?d rdfs:subClassOf* ?prod ;
rdfs:label ?dl .
}
}