如何使用sparql从RDF Triple的谓词中提取subject(Name)

时间:2013-06-20 07:42:04

标签: rdf sparql n-triples

http://www.example.com/teach.rdfs/John   http://www.example.com/teach.rdfs#position "Full Professor"        

http://www.example.com/teach.rdfs/John   http://www.example.com/teach.rdfs#course"Math"

http://www.example.com/teach.rdfs/John   http://www.example.com/teach.rdfs#student"Undergraduate"

http://www.example.com/teach.rdfs/Arthur http://www.example.com/teach.rdfs#position "Assistant Professor"

http://www.example.com/teach.rdfs/Arthur http://www.example.com/teach.rdfs#course"Web Engineering"

http://www.example.com/teach.rdfs/Arthur http://www.example.com/teach.rdfs#student"Graduate"

如果这些是三元组,我想找到教授研究生的助理教授

 Lecturer       Position

 Arthur         Assistant Professor 

如何使用SPARQL

提取上述日期

1 个答案:

答案 0 :(得分:4)

您的数据不属于我所知道的任何合法的RDF序列化,但很容易将其纳入N3序列化。在同一文档中将http://.../teach.rdfs#http://.../teach.rdfs/用作前缀是相当不寻常的。看到一个或另一个,但不是两者都是常见的。这不是非法,所以我们可以使用它。在N3格式中,这是您的数据作为文件data.n3

@prefix teach1: <http://www.example.com/teach.rdfs/> .
@prefix teach2: <http://www.example.com/teach.rdfs#> .

teach1:John teach2:position "Full Professor" .
teach1:John teach2:course "Math" .
teach1:John teach2:student "Undergraduate" .
teach1:Arthur teach2:position "Assistant Professor" .
teach1:Arthur teach2:course "Web Engineering" .
teach1:Arthur teach2:student "Graduate" .

查询也很简单。这是一个名为query.sparql的文件:

PREFIX teach1: <http://www.example.com/teach.rdfs/>
PREFIX teach2: <http://www.example.com/teach.rdfs#>

SELECT ?lecturer ?position WHERE {
  VALUES ?position { "Assistant Professor" }
  ?lecturer teach2:position ?position ;
            teach2:student "Graduate" .
}

这个查询唯一有点不同寻常的是使用VALUES ?position { "Assistant Professor" }。我使用VALUES表单的原因是您希望的结果包含输出中的"Assistant Professor"。如果我们排除VALUES ...部分,我们可以将模式重写为

  ?lecturer teach2:position "Assistant Professor" ;
            teach2:student "Graduate" .

仍然找到相同的?lecturer,但没有绑定到"Assistant Professor"的变量。有了数据和查询,我们可以使用Jena的ARQ命令行工具对数据运行查询:

$ arq --query query.sparql --data data.n3 
-----------------------------------------
| lecturer      | position              |
=========================================
| teach1:Arthur | "Assistant Professor" |
-----------------------------------------
相关问题