【发布时间】:2017-05-26 13:40:42
【问题描述】:
我将我的数据组织成多个图表。保存三元组的图表很重要。数据结构很复杂,但可以这样简化:
我的商店包含蛋糕,其中有不同蛋糕类型的层次结构,<cake> 的所有子类
<http://example.com/a1> a <http://example.com/applecake>
<http://example.com/a2> a <http://example.com/rainbowcake>
...
根据用户在 UI 中创建它们的方式,它们最终会出现在不同的图表中。例如,如果用户“烤”了一个蛋糕,它会出现在<http://example.com/homemade> 图表中,如果他们“购买”了一个蛋糕,它就会进入<http://example.com/shopbought> 图表。
当我从商店取回蛋糕时,我想知道每个蛋糕是自制的还是商店购买的。这没有属性,我想完全根据存储三元组的图形来检索信息。
我尝试了各种方法来实现这一点,但没有一种方法可以在 Jena TDB 中使用。问题是所有蛋糕都以“商店购买”的形式返回。然而,所有查询都在 Fuseki 中工作(在确切的 sae 数据集上),我想知道这是 TDB 错误还是有其他方法。以下是简化的查询(没有变化):
版本 1:
SELECT DISTINCT *
FROM <http://example.com/homemade>
FROM <http://example.com/shopbought>
FROM NAMED <http://example.com/homemade>
FROM NAMED <http://example.com/shopbought>
WHERE {
?cake rdf:type ?caketype .
?caketype rdfs:subClassOf* <cake>
{
GRAPH <http://example.com/homemade> { ?cake rdf:type ?typeHomemade }
} UNION {
GRAPH <http://example.com/shopbought> { ?cake rdf:type ?typeShopbought }
}
BIND(str(if(bound(?typeHomemade), true, false)) AS ?homemade)
}
版本 2:
SELECT DISTINCT *
FROM <http://example.com/homemade>
FROM <http://example.com/shopbought>
FROM NAMED <http://example.com/homemade>
FROM NAMED <http://example.com/shopbought>
WHERE {
?cake rdf:type ?caketype .
?caketype rdfs:subClassOf* <cake>
GRAPH ?g {
?cake rdf:type ?caketype .
}
BIND(STR(IF(?g=<http://example.com/homemade>, true, false)) AS ?homemade)
}
任何想法为什么这在 Fuseki 中有效但在 TDB 中无效?
编辑: 我开始认为它与 GRAPH 关键字有关。下面是一些更简单的查询(在 Fuseki 和 tdbquery 中工作)以及我使用 Jena API 得到的结果:
SELECT * WHERE { GRAPH <http://example.com/homemade> { ?s ?p ?o }}
0 个结果
SELECT * WHERE { GRAPH ?g { ?s ?p ?o }}
0 个结果
SELECT * FROM <http://example.com/homemade> WHERE { ?s ?p ?o }
x 个结果
SELECT * FROM <http://example.com/homemade> WHERE { GRAPH <http://example.com/homemade> { ?s ?p ?o }}
0 个结果
SELECT * FROM NAMED <http://example.com/homemade> WHERE { GRAPH <http://example.com/homemade> { ?s ?p ?o }}
0 个结果
【问题讨论】:
-
斯坦尼斯拉夫是正确的。为图形名称使用完整的 URI。否则,这些可能会被解析为文件的默认位置等。
-
我确实使用了完整的 URI,我只是在示例中缩短了它并使用括号表示它是一个完整的 URI。我相应地更新了我的示例以使其更加清晰。
-
在将数据加载到相应图表期间的完整 URI ...
标签: sparql jena fuseki tdb named-graphs