#sparql #rdf #virtuoso #triplestore
#sparql #rdf #виртуоз #triplestore
Вопрос:
Я загрузил набор троек RDF на локальную конечную точку Virtuoso.
Из всех этих троек я хотел бы извлечь только те, у субъектов которых есть по крайней мере предикатыhttp://www.w3.org/2000/01/rdf-schema#label и http://www.w3.org/2000/01/rdf-schema#comment.
Например, из этих троек:
<http://dbpedia.org/resource/AccessibleComputing> <http://www.w3.org/2000/01/rdf-schema#label> "AccessibleComputing"@en .
<http://dbpedia.org/resource/AfghanistanGeography> <http://www.w3.org/2000/01/rdf-schema#label> "AfghanistanGeography"@en .
<http://dbpedia.org/resource/AfghanistanGeography> <http://www.w3.org/2000/01/rdf-schema#comment> " ... " .
<http://dbpedia.org/resource/Austroasiatic_languages> <http://www.w3.org/2000/01/rdf-schema#comment> " ... " .
<http://dbpedia.org/resource/AccessibleComputing> <http://dbpedia.org/ontology/wikiPageWikiLink> <http://dbpedia.org/resource/Computer_accessibility> .
<http://dbpedia.org/resource/AfghanistanGeography> <http://dbpedia.org/ontology/wikiPageWikiLink> <http://dbpedia.org/resource/Afghanistan_Geography> .
Я хотел бы получить:
<http://dbpedia.org/resource/AfghanistanGeography> <http://www.w3.org/2000/01/rdf-schema#label> "AfghanistanGeography"@en .
<http://dbpedia.org/resource/AfghanistanGeography> <http://www.w3.org/2000/01/rdf-schema#comment> " ... " .
<http://dbpedia.org/resource/AfghanistanGeography> <http://dbpedia.org/ontology/wikiPageWikiLink> <http://dbpedia.org/resource/Afghanistan_Geography> .
Возможно ли это сделать с помощью одного (или нескольких) запроса SPARQL?
Спасибо за помощь
Ответ №1:
Это можно сделать с CONSTRUCT WHERE
запросом:
CONSTRUCT WHERE {
?s rdfs:label ?label.
?s rdfs:comment ?comment.
?s ?p ?o
}
Это упрощенная форма CONSTRUCT
, которая может использоваться, когда CONSTRUCT {}
часть и WHERE {}
part идентичны.
Ответ №2:
Один из способов — использовать DESCRIBE
, например:
DESCRIBE ?s
WHERE {
?s rdfs:label ?label .
?s rdfs:comment ?comment .
}
или, альтернативно, с CONSTRUCT
:
CONSTRUCT { ?subject ?predicate ?object}
WHERE {
?subject ?predicate ?object .
FILTER EXISTS {
?subject rdfs:label ?label .
?subject rdfs:comment ?comment .
}
}
Комментарии:
1. Поведение
DESCRIBE
зависит от хранилища SPARQL, и оно может включать дополнительные тройки, которые нежелательны, или пропускать нужные тройки. Таким образом, в зависимости от используемого хранилища это может быть не очень хорошим выбором.