2

我有两个 SPARQL 更新。第一个:

INSERT 
{ GRAPH <[http://example/bookStore2]> { ?book ?p ?v } }
WHERE
{ GRAPH  <[http://example/bookStore]>
   { ?book dc:date ?date .
     FILTER ( ?date > "1970-01-01T00:00:00-02:00"^^xsd:dateTime )
     ?book ?p ?v
} }

第二:

INSERT 
{ GRAPH <[http://example/bookStore2]> { ?book ?p ?v } }
WHERE
{ GRAPH  <[http://example/bookStore3]>
   { ?book dc:date ?date .
     FILTER ( ?date > "1980-01-01T00:00:00-02:00"^^xsd:dateTime )
     ?book ?p ?v
} }

我可以将它们与 UNION 运算符结合使用吗?如果是,是否是等效的结果?是否可以在 SPARQL 更新中使用 UNION,例如在“Select”中?

4

2 回答 2

2

AndyS 的回答是正确的;您可以将它们组合起来,UNION 的描述在 SPARQL 规范的第7 节匹配替代项中找到。组合查询将是:

INSERT { 
  GRAPH <[http://example/bookStore2]> { ?book ?p ?v }
}
WHERE{ 
  {
    GRAPH  <[http://example/bookStore]> {
      ?book dc:date ?date .
      FILTER ( ?date > "1970-01-01T00:00:00-02:00"^^xsd:dateTime )
      ?book ?p ?v
    }
  }
  UNION
  {
    GRAPH <[http://example/bookStore3]> {
      ?book dc:date ?date .
      FILTER ( ?date > "1980-01-01T00:00:00-02:00"^^xsd:dateTime )
      ?book ?p ?v
    }
  }
}

在这种模式非常相似的特殊情况下,您也可以使用VALUES抽象出不同的部分:

INSERT { 
  GRAPH <[http://example/bookStore2]> { ?book ?p ?v }
}
WHERE{ 
  values (?graph ?startDate) { 
    (<[http://example/bookStore]> "1970-01-01T00:00:00-02:00"^^xsd:dateTime)
    (<[http://example/bookStore3]> "1980-01-01T00:00:00-02:00"^^xsd:dateTime)
  }
  GRAPH ?graph {
    ?book dc:date ?date .
    FILTER ( ?date > ?startDate )
    ?book ?p ?v
  }
}
于 2013-08-26T18:52:36.673 回答
1

WHERE 子句与 SPARQL 查询相同 - 您可以使用 UNION。

于 2013-03-13T11:57:02.203 回答