2017-05-08 48 views
-1

这个SPARQL查询中星号的含义是什么?这个SPARQL查询中星号的含义是什么?

SELECT ?uri ?type 
WHERE{ 
    ?uri a ?type. 
    ?type rdfs:subClassOf* example:Device. 
} 

这是否意味着“子类的子类”? 我可以与其他谓词一起使用吗?

+1

Ehm,来自我身边的一个问题:你读过我对你的第一个问题的回答:http://stackoverflow.com/questions/43827050/what-does-a-mean-in-this-sparql-query。在那里我向您展示了一个链接到SPARQL 1.1 Property Paths(https://www.w3.org/TR/sparql11-query/#propertypaths),对不对? – AKSW

+0

是的。这个参考非常好。基于此,我认为其含义是“子类的子类”。我只是想确认一下。 – Juan

+0

不,'p *'是属性'p'的传递闭包,在你的情况下'p = rdfs:subClassOf' – AKSW

回答

1

谓词后面的星号表示您希望遵循零个或多个出现rdfs:subClassOf的属性路径。

你的短语“子类的子类”是关于正确的,虽然我会说“子类的子类”,因为*属性路径是递归的。正如你可以从AKSW评论的技术文件中看到的,有几个其他的财产路径运营商可以在任何一个方向上进行操作,对于遮蔽数量(或深度)有或没有限制。

这是一个很好的例子, Marklogic ...我认为这应该在任何1.1端点内工作。

https://developer.marklogic.com/features/semantics/path-examples

是,财产路径适用于任何谓词/属性,不仅仅是RDFS:subClassOf。

1

路径元素之后的星号(*)表示“该元素为零或多个”。

如果路径中没有其他元素,那么?a * * b意味着?b也可能只是?a,而它们之间根本没有路径元素。

?item wdt:P31/wdt:P279* ?class. 
# means: 
?item wdt:P31 ?class 
# or 
?item wdt:P31/wdt:P279 ?class 
# or 
?item wdt:P31/wdt:P279/wdt:P279 ?class 
# or 
?item wdt:P31/wdt:P279/wdt:P279/wdt:P279 ?class 

如果在路径中没有其他元素,?一个东西*?B表示?B还可能仅仅是?直接在,它们之间没有路径元素可言。有关更详细的答案,请参阅here