Учитывая эти данные (которые по существу принадлежат вам, за исключением того, что я добавил .
s в конце строк, так что это действительная черепаха, и я добавил пару троек, чтобы мы могли видеть, объект или объект, не находящийся в специальном наборе, сохранит тройку из результатов):
@prefix obj: <http://example.org/obj/> .
@prefix rel: <http://example.org/rel/> .
obj:obj1 rel:rel1 obj:obj2 .
obj:obj3 rel:rel2 obj:obj2 .
obj:obj1 rel:rel4 obj:obj8 . # additional triple
obj:obj9 rel:rel7 obj:obj2 . # additional triple
obj:obj9 rel:rel5 obj:obj8 .
obj:obj1 rel:rel1 obj:obj3 .
Вы можете использовать запрос следующим образом:
prefix obj: <http://example.org/obj/>
select ?s ?p ?o where {
values ?s { obj:obj1 obj:obj2 obj:obj3 }
values ?o { obj:obj1 obj:obj2 obj:obj3 }
?s ?p ?o .
}
, чтобы получить результаты, как это:
$ sparql --query query.rq --data data.n3
----------------------------------
| s | p | o |
==================================
| obj:obj1 | rel:rel1 | obj:obj3 |
| obj:obj1 | rel:rel1 | obj:obj2 |
| obj:obj3 | rel:rel2 | obj:obj2 |
----------------------------------
Использование values
здесь как раз говорит, что ?s
должен извлечь из конкретной набор значений и что ?o
должен быть нарисован из определенного набора значений. Я не думаю, что есть способ избежать повторения списка специальных ресурсов в каждом месте. То есть вам придется писать { obj:obj1 obj:obj2 obj:obj3 }
дважды, но это все же намного проще, чем перечисление всех возможных комбинаций.
Возможно, вы также можете использовать здесь construct
, а не select
, если то, что вы хотите назад, на самом деле является графиком, а не набором переменных привязок. Например, с этим запросом:
prefix obj: <http://example.org/obj/>
construct { ?s ?p ?o } where {
values ?s { obj:obj1 obj:obj2 obj:obj3 }
values ?o { obj:obj1 obj:obj2 obj:obj3 }
?s ?p ?o .
}
вы можете получить фактический RDF граф назад:
$ sparql -out TTL --query query.rq --data data.n3
@prefix obj: <http://example.org/obj/> .
@prefix rel: <http://example.org/rel/> .
obj:obj1 rel:rel1 obj:obj3 , obj:obj2 .
obj:obj3 rel:rel2 obj:obj2 .
$ sparql -out N-Triples --query query.rq --data data.n3
<http://example.org/obj/obj1> <http://example.org/rel/rel1> <http://example.org/obj/obj3> .
<http://example.org/obj/obj1> <http://example.org/rel/rel1> <http://example.org/obj/obj2> .
<http://example.org/obj/obj3> <http://example.org/rel/rel2> <http://example.org/obj/obj2> .
$ sparql -out RDF/XML --query query.rq --data data.n3
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:obj="http://example.org/obj/"
xmlns:rel="http://example.org/rel/">
<rdf:Description rdf:about="http://example.org/obj/obj1">
<rel:rel1>
<rdf:Description rdf:about="http://example.org/obj/obj3">
<rel:rel2 rdf:resource="http://example.org/obj/obj2"/>
</rdf:Description>
</rel:rel1>
<rel:rel1 rdf:resource="http://example.org/obj/obj2"/>
</rdf:Description>
</rdf:RDF>
Данные, которые вы предоставили не является законным Turtle, и запрос SPARQL, который вы указали, недействителен, либо 'SELET' не является ключевым словом. В будущем скопируйте данные и код vebatim. –