Rdf SPARQL插入查询未插入

Rdf SPARQL插入查询未插入,rdf,sparql,Rdf,Sparql,运行此SPARQL更新时: INSERT { GRAPH <n4> { ?s foaf:firstName ?o } } WHERE { GRAPH <n1> { ?s foaf:familyName ?o . ?o foaf:familyName ?x } } 虽然它在语法上很好,但我没有得到任何结果。是否因为INSERT子句中的?s不能同时绑定到?s和?o 对于SPARQL,您的查询在语法上很好,但在大多数情况下,它可能匹配的

运行此SPARQL更新时:

INSERT {
  GRAPH <n4> {
    ?s foaf:firstName ?o
  }
}
WHERE {
  GRAPH <n1> {
    ?s foaf:familyName ?o .
    ?o foaf:familyName ?x
  }
}

虽然它在语法上很好,但我没有得到任何结果。是否因为INSERT子句中的?s不能同时绑定到?s和?o

对于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的值。我希望您不会看到任何结果,这就是为什么不在n4中插入任何三元组的原因

至于你问的那个问题

是否因为INSERT子句中的?s不能同时绑定到?s和?o


同时绑定没有问题。查询的WHERE部分生成一组可能为空的结果,每个结果都绑定s、o和x。然后,对于每个解决方案,使用?s和?o的值构造三重值-s foaf:firstName value-of-o,并将所有这些三重值插入n4。n4中没有插入任何内容,因为由于上述原因,结果集为空。

您的查询在语法上适合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的值。我希望您不会看到任何结果,这就是为什么不在n4中插入任何三元组的原因

至于你问的那个问题

是否因为INSERT子句中的?s不能同时绑定到?s和?o


同时绑定没有问题。查询的WHERE部分生成一组可能为空的结果,每个结果都绑定s、o和x。然后,对于每个解决方案,使用?s和?o的值构造三重值-s foaf:firstName value-of-o,并将所有这些三重值插入n4。由于上述原因,n4中没有插入任何内容,因为结果集为空。

我使用了Jena Fuseki的0.2.7版。我认为问题在于我必须显式地创建图形,然后运行插入更新。这适用于一个图形,但如果您想将groupgraphpattern评估为更大的数据集,例如n1、n2、n3,则不会给出任何结果。

我使用了Jena Fuseki的0.2.7版。我认为问题在于我必须显式地创建图形,然后运行插入更新。这适用于一个图形,但如果您想将groupgraphpattern评估为更大的数据集,例如n1、n2、n3,则不会给出任何结果。

我有foaf:familyName类型的三元组,因此上述模式应该匹配。我运行你提出的选择,你是对的,我没有得到任何结果,但我仍然无法解释原因。@Cheryl你有一个IRI作为姓氏对我来说似乎有点奇怪,但这是完全合法的。但是,要匹配的是?s familyName?o?o familyName?x,您需要familyName和familyName格式的数据。你的姓也有姓吗?WHERE中的整个模式必须匹配,包括?o familyName?x,即使插入部分中没有使用?x。是的,我有familyName,familyName,familyNameetc@Cheryl请在问题中添加一些数据。如果数据在图中实际包含familyName和familyName,则select查询应该正在检索它。要么数据不在,要么它没有您描述的格式,要么两者都有。@Cheryl如果您找到了解决方案,您能否将其作为答案发布并接受,以便其他可能面临相同问题的用户可以找到它?请务必提及您正在使用的Fuseki的特定版本。根据SPARQL 1.1规范的一节,“非空插入到不存在的图中会隐式地创建这些图”,因此,如果您发现这种情况不会发生,您还应该让Jena开发人员知道。但是,如果您使用的是旧版本,它可能已经被修复了……我有foaf:familyName类型的三元组,因此上面的模式应该匹配。我运行了你提出的选择,你是对的,我没有得到任何结果,但我仍然无法解释原因。@Cheryl,你有一个
IRI作为一个姓氏对我来说似乎有点奇怪,但它是完全合法的。但是,要匹配的是?s familyName?o?o familyName?x,您需要familyName和familyName格式的数据。你的姓也有姓吗?WHERE中的整个模式必须匹配,包括?o familyName?x,即使插入部分中没有使用?x。是的,我有familyName,familyName,familyNameetc@Cheryl请在问题中添加一些数据。如果数据在图中实际包含familyName和familyName,则select查询应该正在检索它。要么数据不在,要么它没有您描述的格式,要么两者都有。@Cheryl如果您找到了解决方案,您能否将其作为答案发布并接受,以便其他可能面临相同问题的用户可以找到它?请务必提及您正在使用的Fuseki的特定版本。根据SPARQL 1.1规范的一节,“非空插入到不存在的图中会隐式地创建这些图”,因此,如果您发现这种情况不会发生,您还应该让Jena开发人员知道。但是,如果您使用的是旧版本,那么它可能已经被修复了……您能澄清一下,将groupgraphpattern计算到更大的数据集是什么意思吗?更具体地说,您的意思是,使用where{values?graph{}graph{s name?o.?o name?x}这样做吗不起作用?你能澄清一下你将groupgraphpattern计算到一个更大的数据集是什么意思吗?更具体地说,你的意思是用{values?graph{}graph{s name?o.?o name?x}这样做不起作用吗?