创建一个SPARQL查询,在不丢失信息的情况下从"rdf:Bag"中提取信息



我对RDF还很陌生,但我需要构造一个RDF查询来从现有的RDF图中提取一些信息。从本质上讲,我试图清除rdf:Bag结构中现有的RDF图。

例如,给定RDF图:

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix bqbiol: <http://biomodels.net/biology-qualifiers/> .
<http://omex-library.org/NewOmex.omex/NewModel.xml#_1>
bqbiol:is [
rdf:_1 <http://identifiers.org/uniprot/P00742> ;
a rdf:Bag
] .

我需要在不丢失信息的情况下从rdf:Bag中提取信息。因此,在这种情况下,生成的rdf图将是:

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix bqbiol: <http://biomodels.net/biology-qualifiers/> .
<http://omex-library.org/NewOmex.omex/NewModel.xml#_1>
bqbiol:is <http://identifiers.org/uniprot/P00742> ;

我的替代方案是在创建图之前使用libxml2进行更改,但看起来sparql在这里应该很有用(如果我错了,请纠正我(。

有人能帮我吗?到目前为止,我所知道的是;给我找一切";sqarql查询,又称

SELECT ?x ?y ?z 
WHERE {?x ?y ?z }

产生

x,y,z
_:r1r21532r1, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag
_:r1r21532r1, http://www.w3.org/1999/02/22-rdf-syntax-ns#_1, http://identifiers.org/uniprot/P00742
http://omex-library.org/NewOmex.omex/NewModel.xml#_1, http://biomodels.net/biology-qualifiers/is, _:r1r21532r1

所以我生成的任何sparql查询都需要涉及特定的r1r21532r1空白节点。

编辑:一点点进展

spaqrl查询

SELECT  ?s ?p1 ?p2
WHERE {
?s ?p1 [ ?p2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag> ] . 
}

产生

| uri<http://omex-library.org/NewOmex.omex/NewModel.xml#_1> | uri<http://biomodels.net/biology-qualifiers/is> | uri<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> |

这更接近,但在过程中丢失了一些信息。

SELECT ?x (bqbiol:is AS ?y) ?z {
?x bqbiol:is [ a rdf:Bag ; !a ?z ] . 
}

SELECT  ?x ?y ?z {
BIND (bqbiol:is AS ?y)
?x ?y [ a rdf:Bag ; !a ?z ] . 
}

在Apache Jena中或在RDFS隐含下:

SELECT ?x (bqbiol:is AS ?y) ?z {
?x bqbiol:is [ a rdf:Bag ; rdfs:member ?z ] . 
}

您也可以使用CONSTRUCT查询表单:

CONSTRUCT { ?x bqbiol:is ?z } {
?x bqbiol:is [ a rdf:Bag ; !a ?z ]
}

最新更新