Как сопоставить относительный IRI субъекта в тройке RDF на языке запросов SPARQL?

Я пытаюсь использовать 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 ири?

edit - ответ на комментарии

Я забыл упомянуть, что пытался использовать 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. Я полагаю, когда пакет, который я пишу, используется в Интернете, они станут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, как я показал здесь.

0 ответов

Другие вопросы по тегам