我正在尝试使用SPARQL
匹配相对于基础的 IRI。这是 rdf-xml 代码的示例片段:
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF xmlns:bqbiol="http://biomodels.net/biology-qualifiers/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xml:base="base-uri.rdf">
<rdf:Description rdf:about="metaid_1">
<bqbiol:is rdf:resource="https://identifiers.org/uniprot/P0DP23"/>
</rdf:Description>
</rdf:RDF>
我想根据主题匹配这个三元组rdf:about="metaid_1"
。如果我运行以下 sparql 查询:
// query 1
SELECT ?x ?y ?z
WHERE {
?x ?y ?z
}
结果是:
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rs: <http://www.w3.org/2001/sw/DataAccess/tests/result-set#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
[] rdf:type rs:ResultSet ;
rs:resultVariable "x" ;
rs:resultVariable "y" ;
rs:resultVariable "z" ;
rs:solution [ rs:binding [ rs:variable "x" ;
rs:value <metaid_1>
] ;
rs:binding [ rs:variable "y" ;
rs:value <http://biomodels.net/biology-qualifiers/is>
] ;
rs:binding [ rs:variable "z" ;
rs:value <https://identifiers.org/uniprot/P0DP23>
]
] .
但是当我运行以下任何一项时,我得到一个空结果:
// query 2
SELECT ?y ?z
WHERE {
<metaid_1> ?y ?z
}
// query 3
SELECT ?y ?z
WHERE {
<base-uri.rdf#metaid_1> ?y ?z
}
// query 4
SELECT ?y ?z
WHERE {
<base-uri.rdf/metaid_1> ?y ?z
}
有人可以建议基于相对metaid_1
iri 匹配三元组的替代查询吗?
编辑 - 回复评论
我忘了提到我确实尝试过BASE
这样使用:
// query 5
SELECT ?y ?z
WHERE {
<BASE/metaid_1> ?y ?z
}
和一些变体,但没有在评论中提出,即:
// query 6
BASE <base-uri.rdf>
SELECT ?y ?z
WHERE {
<metaid_1> ?y ?z
}
它还返回一组空的结果。
编辑 2 - 回复更多评论
@uninformedUser 是正确的,因为我要使用本地 iri,因为这些主题本质上是本地 xml 字符串的 xml 元素上的 metaid 属性。我想当我正在编写的包在网上使用时,它们会变成https://
,但现在它们只是为测试而创建的字符串。
我已经尝试将其更改为xml:base
,file:///mnt/d/libsemsim/tests/base-uri.rdf
所以现在 xml 片段显示为:
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF xmlns:bqbiol="http://biomodels.net/biology-qualifiers/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xml:base="file:///mnt/d/libsemsim/tests/base-uri.rdf">
<rdf:Description rdf:about="metaid_1">
<bqbiol:is rdf:resource="https://identifiers.org/uniprot/P0DP23"/>
</rdf:Description>
</rdf:RDF>
和查询:
BASE <file:///mnt/d/libsemsim/tests/base-uri.rdf>
SELECT ?y ?z
WHERE {
<metaid_1> ?y ?z
}
但我的结果集仍然是空的。我想知道问题是否在于我正在查询rdf
model
自身,它是librdf 包中的中心对象,不一定是我在这里展示的 xml 的序列化表示。