如何在SPARQL查询语言中匹配RDF三元组中某个主题的相对IRI?

时间:2020-04-27 11:13:43

标签: xml sparql rdf raptor2 rasqal

我正在尝试使用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 package中的中心对象,而不一定像我一样是xml的序列化表示形式一直在这里显示。

0 个答案:

没有答案