2017-06-10 56 views
2

我有以下数据:分组由空节点

@prefix f: <http://example.org#> . 

_:a f:trait "Rude"@en . 
_:a f:name "John" . 
_:a f:surname "Roy" . 
_:b f:trait "Crude"@en . 
_:b f:name "Mary" . 
_:b f:surname "Lestern" . 

但是,如果我在执行以下查询Blazegraph

PREFIX f: <http://example.org#> 

SELECT ?s ?o 
WHERE 
{ 
    ?s f:trait ?o . 
} 

我获得六项成果:

s o 
t32 Crude 
t37 Crude 
t39 Crude 
t31 Rude 
t36 Rude 
t38 Rude 

如果空白节点_:a_:b是disti nct节点,我应该如何编写SPARQL查询以仅返回两个不同的结果?我试过SELECT DISTINCT,但它仍然返回6个结果。我试过?o,但Blazegraph返回一个错误,说这是一个坏的聚合。为什么这种重复元组的输出会发生?以及如何避免它?

+1

你是什么_exactly_意思是“我有以下数据”?我想你的问题与[this]类似(https://sourceforge.net/p/bigdata/discussion/676946/thread/e6d077d0/#d6e3)。 –

+1

@StanislavKralin我的意思是我已经使用应用程序中的更新选项卡加载到blazegraph中的数据。这只是一个小练习数据集,因为我正在学习SPARQL。所以这可能是一个错误,如果我的链接正确。 – Liliane

+1

如果您真的在单个图中的示例数据上获得了6个查询结果,那么Blazegraph中有些问题是错误的。 – AKSW

回答

2

问题是,您已经多次插入包含空白节点的数据。这个操作不是幂等的。

有用的报价

RDF 1.1 Concepts and Abstract Syntax

空节点标识符是在一些具体RDF语法或RDF存储实现使用本地标识符。它们始终局限于文件或RDF存储区,而不是用于空白节点的持久性或可移植标识符。

RDF 1.1 Semantics

RDF图可以如在第一阶逻辑,其中空节点是被理解为存在的自由变量简单原子句子的连词查看。然后把这两个图的联合类似于这个语法中的句法连接。 RDF语法没有明确的变量绑定量词,因此任何RDF图的真值条件都将该图中的自由变量视为在该图中存在的量化值。考虑共享空白节点的图的联合改变了隐含的量词范围。

SPARQL 1.1 Query Language

空白节点标签的作用域到一个结果集。

结果集中的标签_:a与具有相同标签的数据图中的空白节点之间不需要有任何关系。

应用程序编写者不应该期望查询中的空白节点标签引用数据中的特定空白节点。

SPARQL 1.1 Update

空节点......被认为是从图形库中的空节点脱节,即,将与“新鲜”空白节点插入。

一些讨论

不同triplestores提供解决方案所描述的 “问题”。例如,Jena allows使用像<_:b1>等伪URI。