Как можно извлечь свойства rdf: about или rdf: ID из троек, используя SPARQL? - PullRequest
2 голосов
/ 04 мая 2010

Сначала это казалось тривиальным вопросом, но до сих пор мне не удалось получить уникальный идентификатор для данного ресурса с помощью SPARQL. То, что я имею в виду, дается, например, rdf:Description rdf:about="http://...", а затем некоторые свойства, идентифицирующие этот ресурс, я хочу сначала найти этот самый ресурс, а затем извлечь все тройки, имеющие некоторый URI.

Я попробовал наивные подходы, написав операторы в предложении WHERE, такие как:

?x rdf:about ?y and ?x rdfs:about ?y

Надеюсь, я буду точен.

1 Ответ

7 голосов
/ 04 мая 2010

Вы делаете классическую ошибку: путаете RDF (то, что запрашивает SPARQL) с (одним из) его сериализацией, а именно RDF / XML. rdf:aboutrdf:ID, rdf:Description, rdf:resource) являются частью RDF / XML, способ записи RDF. Вы можете поиграться с RDF Validator , чтобы посмотреть, какие тройные RDF получаются из фрагмента RDF / XML.

В вашем случае давайте начнем с:

<?xml version="1.0"?>
<rdf:RDF 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:dc="http://purl.org/dc/terms/">
  <rdf:Description rdf:about="http://www.example.org/">
    <dc:title>Example for Donal Fellows</dc:title> 
  </rdf:Description>
</rdf:RDF>

Подключите это к валидатору , и вы получите:

Number      Subject                      Predicate                        Object
1           http://www.example.org/      http://purl.org/dc/terms/title   "Example for Donal Fellows"

(вы также можете запросить графическое изображение)

Обратите внимание, что rdf:about не присутствует: его значение предоставляет субъект для тройки.

Как мне сделать запрос, чтобы найти свойства, связанные с http://www.example.org? Как это:

select * {
    <http://www.example.org/> ?predicate ?object
}

Вы получите:

?predicate                        ?object
<http://purl.org/dc/terms/title>  "Example for Donal Fellows"

Вы заметите, что запрос представляет собой тройное совпадение с переменными (?v) в тех местах, где мы хотим найти значения. Мы могли бы также спросить, что предикат связывает http://www.example.org/ с "Example for...", задав:

select * {
    <http://www.example.org/> ?predicate "Example for Donal Fellows"
}

Это сопоставление с образцом является сердцем SPARQL.

RDF / XML - хитрый зверь, и вам может быть проще работать с N-Triples , который очень многословен, но ясен, или черепаха , который похож на N -Триплы с большим количеством сокращений и сокращений. Сообщество rdf часто предпочитает черепаху.

P.S. rdfs:about нигде не существует.

...