小编Max*_*Max的帖子

Sparql查询集合和rdf:容器?

嗨所有rdf/sparql开发人员.这个问题一直困扰着我一段时间,但似乎没有人能够准确地回答它,因为rdf和sparql规范已经发布.

为了说明这种情况,RDF定义了几种处理资源多值属性的方法; 从使用相同的subjet-predicate uris创建尽可能多的三元组到集合或容器.这一切都很好,因为每个模式都有自己的特点.

但是从SPARQL的观点来看,在我看来,查询这些结构导致过于复杂的查询(更糟糕的是)无法转录为合理的结果集:您不能使用变量来查询任意长度,而propertyPath也是如此不保留"自然"秩序.

在一种天真的方式中,在许多SELECT或ASK查询中,如果我想查询或过滤容器或列表的值,我绝大多数时候都不会关心底层模式究竟是什么(如果有的话).例如:

<rdf:Description rdf:about="urn:1">
    <rdfs:label>
        <rdf:Alt>
            <rdf:li xml:lang="fr">Exemple n°1</rdf:li>
            <rdf:li xml:lang="en">Example #1</rdf:li>
        </rdf:Alt>
    </rdfs:label>
    <my:release>
        <rdf:Seq>
            <rdf:li>10.0</rdf:li>
            <rdf:li>2.4</rdf:li>
            <rdf:li>1.1.2</rdf:li>
            <rdf:li>0.9</rdf:li>
        </rdf:Seq>
    </my:release>
</rdf:Description>

<rdf:Description rdf:about="urn:2">
    <rdfs:label xml:lang="en">Example #2</rdfs:label>
</rdf:Description>
Run Code Online (Sandbox Code Playgroud)

显然我希望两种资源都能回答这个问题:

SELECT ?res WHERE { ?res rdfs:label ?label . FILTER ( contains(?label, 'Example'@en) }
Run Code Online (Sandbox Code Playgroud)

我也希望查询:

SELECT ?ver WHERE { <urn:1> my:release ?ver }
Run Code Online (Sandbox Code Playgroud)

按原始顺序返回rdf:Seq元素(或任何rdf:Alt)(对于其他模式,如果保留原始顺序无关紧要,为什么不保留它呢?) - 除非明确指定通过ORDER BY子句.

当然,有必要保持与旧方法的兼容性,所以也许有可能使用new运算符扩展propertyPath语法?

我觉得它会简化日常的SPARQL用例.

这对你有意义吗?此外,你有没有理由不尝试实施这个?

编辑更正了示例的urn:2 rdfs:标签值不正确

containers rdf sparql

7
推荐指数
2
解决办法
2755
查看次数

如何用Sesame获得资源的简洁有界描述?

我一直在测试Sesame 2.7.2,当遇到DESCRIBE查询不包含空白节点关闭的事实时,我有一个很大的惊喜[ 编辑:正确的术语是CBD,用于简洁有界的描述 ]

如果我正确理解,SPARQL规范相当松散,并且说返回的内容实际上取决于提供者,但我仍然对选择感到惊讶,因为无法使用bnodes(在describe查询的结果中)在后续的SPARQL查询中.

所以问题是:如何在<uri1>不执行以下操作的情况下获得资源的封闭描述:

  1. 询问 DESCRIBE <uri1>
  2. 迭代结果以确定哪些对象是空节点
  3. 然后 DESCRIBE ?b WHERE { <uri1> pred_relating_to_bnode_ ?b }
  4. 只要找到bnode就可以递归地进行链接

如果我没有弄错的话,必须用深度2个bnodes来描述

DESCRIBE ?b2 WHERE {<uri1> <p1&> ?b . ?b <p2> ?b2 }
Run Code Online (Sandbox Code Playgroud)

除非有更简单的方法吗?

最后,让DESCRIBE一个资源的封闭描述让你仍然可以获得当前返回的结果并不是更好,更简单吗?

CONSTRUCT {<uri1> ?p ?o} WHERE {<uri1> ?p ?o}
Run Code Online (Sandbox Code Playgroud)

编辑:这是我想从芝麻回来的封闭结果的一个例子

<urn:sites#1> a my:WebSite .
<urn:sites#1> my:domainName _:autos1 .
<urn:sites#1> my:online "true"^^xsd:boolean .
_:autos1 a rdf:Alt .
_:autos1 rdf:_1 _:autos2
_:autos2 my:url "192.168.2.111:15001"@fr
_:autos2 my:url "192.168.2.111:15002"@en
Run Code Online (Sandbox Code Playgroud)

目前:DESCRIBE <urn:sites#1>返回与查询相同的结果CONSTRUCT WHERE …

rdf sesame semantic-web sparql blank-nodes

6
推荐指数
1
解决办法
592
查看次数

标签 统计

rdf ×2

sparql ×2

blank-nodes ×1

containers ×1

semantic-web ×1

sesame ×1