Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SPARQL类型表达式在内部是如何工作的(例如,rdf:type?b)?_Sparql_Rdf_Semantic Web - Fatal编程技术网

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

SPARQL类型表达式在内部是如何工作的(例如,rdf:type?b)?,sparql,rdf,semantic-web,Sparql,Rdf,Semantic Web,我在Protege中创建了一个本体,它描述了一家音乐制作公司。我很难理解SPARQL查询及其工作方式 一些解释 ?人员:我想在其中输出人员的变量。他们是受保护的个人 ?国籍我想在其中输出国籍的变量。他们是 Protege中的数据属性 国籍:数据属性,包含作为字符串的国籍,每个人都有一个 我的:我创建的前缀 这是如何工作的?person rdf:type?p以及它如何选择正确的类型?它能自动工作吗?我不觉得我已经将?person变量设置为类型person变量,这是我创建的一个类,它将一个人描述为一

我在Protege中创建了一个本体,它描述了一家音乐制作公司。我很难理解SPARQL查询及其工作方式

一些解释

?人员:我想在其中输出人员的变量。他们是受保护的个人

?国籍我想在其中输出国籍的变量。他们是 Protege中的数据属性

国籍:数据属性,包含作为字符串的国籍,每个人都有一个

我的:我创建的前缀

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

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

它没有选择正确的类型。它选择一种类型、任何类型以及任何个人。您看到预期结果的原因大概是查询的第二部分:

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")
}
在您的数据中,只有个人具有此属性,因此即使有其他具有不同类型的个人,也只有他们才能匹配完整查询

SPARQL的工作原理本质上是模式匹配。为RDF图指定模板后,查询中的变量就是该模板中的孔。返回图形中适合整个模板的部分

换句话说,你的查询要求如下:给我所有既有类型又有国籍的东西。可能有很多东西都有一个类型,但因为只有人有国籍,所以只有人被返回

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

?person my:Nationality ?nationality.

SPARQL->RDF->它不查询OWL世界中存在的个人、属性、类等。只是主语,谓语,宾语
?person rdf:type my:Person.
?person my:Nationality ?nationality.