SPARQL类型表达式如何在内部工作(例如?a rdf:type?b)?

时间:2018-05-24 16:32:26

标签: sparql rdf semantic-web

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX my: <http://www.ex.com#>
SELECT distinct ?person ?nationality
WHERE{
    ?person rdf:type ?p.
    ?person my:Nationality ?nationality.
    filter (?nationality = "Some nationality")
}

我在Protege中创建了一个描述音乐制作公司的本体。我无法理解SPARQL查询及其工作方式。

一些解释

?person :我要输出人物的变量。他们是Protege的个人

?nationality 我要输出国籍的变量。他们是 Protege中的数据属性

Nationality :数据属性,其中包含国籍/字符串,每个人都有一个

my :我创建的前缀

这是如何工作的?person rdf:type ?p以及如何选择正确的类型?它会自动运作吗?我不觉得我已经将?person变量设置为类型Person变量(这是我创建的一个类,它将一个人描述为一个实体),即使它输出的确是我需要的结果

1 个答案:

答案 0 :(得分:1)

  

这如何运作&#34;?person rdf:type?p&#34;以及如何选择合适的类型?我不觉得我已经将?person变量设置为类型Person变量(这是我创建的类,它将一个人描述为一个实体),即使它输出的确是我需要的结果。

它没有选择正确的类型。它选择 a 类型,任何类型(以及任何个人)。大概是你看到预期结果的原因是你的查询的第二部分:

?person my:Nationality ?nationality.

在您的数据中,只有个人拥有此属性,因此只有匹配完整查询才会匹配(即使其他人具有不同的类型)。

SPARQL的工作原理本质上是模式匹配。您为RDF图指定了模板,查询中的变量是&#34; hole&#34;在那个模板中。无论您的图形中哪个部分适合整个模板都会返回。

换句话说,您的查询会询问以下内容:&#34;给我所有同时具有类型的国家&#34;。可能有许多类型的东西,但由于只有人有国籍,才会有人返回。

如果您愿意,您可以明确表示您只对Person类型的个人感兴趣,方法是将变量?p替换为人员的类标识符,例如:

?person rdf:type my:Person.
?person my:Nationality ?nationality.