我正试图从药物本体中获取有一种成分的实体,使用像
这样的限制OBI_0000576
'散射分子聚合物'BFO_0000053
'是'BFO_0000071
'具有细粒度部分' 但未指定指定的质量(PATO_0000125
)。一个例子是'对乙酰氨基酚/氢可酮口服片'
http://purl.obolibrary.org/obo/DRON_00020585,但'对乙酰氨基酚230 MG /氢可酮5 MG口服片'http://purl.obolibrary.org/obo/DRON_00038671
我已将此实现为带有两个先前开发的查询的减号操作
我养成了将猫头鹰限制称为空白节点而不是给它们变量的习惯
此查询运行缓慢(在具有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 .
}
}