创建一个从 rdf:Bag 中提取信息而不丢失信息的 SPARQL 查询
Creating a SPARQL query that extracts information out of a `rdf:Bag` without loss of information
我是 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 ]
}
我是 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 ]
}