首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SPARQL类型表达式是如何在内部工作的(例如? rdf:type ?b)?

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

Stack Overflow用户
提问于 2018-05-25 00:32:26
回答 1查看 74关注 0票数 0
代码语言:javascript
复制
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:变量。他们是被保护的个体

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

Nationality:数据属性,该属性将国籍作为字符串包含,并且每个人都有一个

我创建的my:前缀

这是如何工作的?person rdf:type ?p,它如何选择正确的类型?它会自动工作吗?我觉得我没有将?person变量设置为Person变量类型(这是我创建的一个类,它将person描述为一个实体),尽管它输出的正是我需要的结果。

EN

回答 1

Stack Overflow用户

发布于 2018-05-25 09:54:11

是如何工作的"?person rdf: type ? p“,它如何选择正确的类型?我觉得我没有将Person变量设置为person变量类型(这是我创建的一个类,它将person描述为一个实体),尽管它输出的正是我需要的结果。

它没有选择正确的类型。它选择一种类型,任何类型(也包括任何个体)。假设您看到预期结果的原因是查询的第二部分:

代码语言:javascript
复制
?person my:Nationality ?nationality.

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

SPARQL的工作原理本质上是模式匹配。您为RDF图指定了一个模板,查询中的变量就是该模板中的“孔”。图中适合整个模板的任何部分都会被返回。

换句话说,您的查询请求如下:“给我所有同时具有类型、的元素一个国籍”。可能有很多东西都有类型,但因为只有人才有国籍,所以只有人才会返回。

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

代码语言:javascript
复制
?person rdf:type my:Person.
?person my:Nationality ?nationality.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50514152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档