从SPARQL变量构造笛卡尔积

从SPARQL变量构造笛卡尔积,sparql,Sparql,我需要一些从SPARQL开始的帮助: 我有一些个人(A,B,C)。我想声明,它们都是一样的。我尝试了以下方法: PREFIX : <http://test.com#> PREFIX owl: <http://www.w3.org/2002/07/owl#> CONSTRUCT { ?p owl:sameAs ?p } WHERE { } VALUES (?p) { (:A) (:B) (:C) } 我想要的是这样的: :A owl:sameAs :B

我需要一些从SPARQL开始的帮助: 我有一些个人(A,B,C)。我想声明,它们都是一样的。我尝试了以下方法:

PREFIX : <http://test.com#> 
PREFIX owl: <http://www.w3.org/2002/07/owl#>
CONSTRUCT {
  ?p  owl:sameAs ?p
}
WHERE {
} VALUES (?p) {
  (:A)
  (:B)
  (:C)
}
我想要的是这样的:

:A owl:sameAs :B
:A owl:sameAs :C
:B owl:sameAs :A
:B owl:sameAs :C
:C owl:sameAs :A
:C owl:sameAs :B

你有什么提示给我,怎么做吗?

像这样的<代码>前缀:前缀owl:CONSTRUCT{o1 owl:sameAs?o2}其中{VALUES?o1{A:B:C}值?o2{A:A:B:C}-如果你不想
:A owl:sameAs:A
添加一个过滤器
过滤器(?o1!=?o2)
谢谢你的提示。我已经尝试过了,并且成功了,但是我仍然很难理解,如果我使用两个变量而不是一个变量,为什么SPARQL的行为会不同?另一个问题出现了,因为在我真正的问题中,我将从子查询返回A,B,C。我尝试将返回的变量绑定到另一个变量,以复制它。但它的行为就像我发布的示例中只有一个变量。你说的“两个变量”是什么意思?SPARQL中唯一重要的是“绑定”,这就是全部-如果你选择了?a(?a as?b){},你仍然只有一组绑定是成对的
(x,x),(y,y),…
,这实际上只会导致
x owl:sameAs x,…
-笛卡尔坐标系总是需要断开的绑定(技术上不正确)如果您只是重复子查询并返回不同的变量,它应该可以工作
:A owl:sameAs :B
:A owl:sameAs :C
:B owl:sameAs :A
:B owl:sameAs :C
:C owl:sameAs :A
:C owl:sameAs :B