Ваш запрос синтаксически хорош для SPARQL, но шаблоны, которым он будет соответствовать, вероятно, в большинстве случаев не являются допустимыми RDF. В частности, маловероятно, что этот паттерн:
?s foaf:familyName ?o .
?o foaf:familyName ?x
когда-либо будет соответствовать вашим данным. Значение ?o
, скорее всего, будет строкой, которая является литералом RDF, а литералы не могут быть объектами троек в RDF, поэтому очень маловероятно, что ?o foaf:familyName ?x
когда-либо сможет соответствовать. Поскольку это означает, что ни одна тройка не будет соответствовать части запроса WHERE, вставлять нечего. Я бы посоветовал вам сначала запустить
SELECT ?s ?o WHERE {
GRAPH <n1> {
?s foaf:familyName ?o .
?o foaf:familyName ?x
}
}
чтобы увидеть, какие значения ?s
и ?o
будут доступны для INSERT. Я ожидаю, что вы не увидите никаких результатов, и поэтому вы не вставляете троек в n4
.
Что касается конкретного вопроса, который вы задали,
Это потому, что ?s
из предложения INSERT нельзя связать одновременно с ?s
и ?o
?
нет проблем с одновременным связыванием. Часть запроса WHERE дает (возможно, пустой) набор результатов, каждый из которых связывает ?s
, ?o
и ?x
. Затем для каждого решения значения ?s
и ?o
используются для построения тройки value-of-s foaf:firstName value-of-o
, и все эти тройки вставляются в n4
. В n4
ничего не вставляется, потому что набор результатов пуст (по причинам, описанным выше).
person
Joshua Taylor
schedule
04.09.2013