我正在尝试使用本地 RDF 图创建 SPARQL 查询。但它不起作用。我在下面包含了我的代码是我的代码。
我有两个班级,学生和大学。学生类有两个属性(enrolledOn 和 studyAt)。University 类也有两个属性(UniversityLocation 和 UniversityRanking)。此外,我输入了一些数据(RDF 三元组)。Student 类和 University 类都具有三个数据实体。
我的 SPARQL 查询位于底部。我想选择所有在排名前 10 的大学学习的学生。但目前,我的 SPARQL 查询没有返回任何内容。查询应返回 Khalil 和 Ahmed。
任何帮助都感激不尽。谢谢你。
我的代码:
import rdfextras
import rdflib
from rdflib.graph import Graph, Store, URIRef, Literal
from rdflib.namespace import Namespace, RDFS
from rdflib import plugin
from SPARQLWrapper import SPARQLWrapper, JSON
rdflib.plugin.register('sparql', rdflib.query.Processor,
'rdfextras.sparql.processor', 'Processor')
rdflib.plugin.register('sparql', rdflib.query.Result,
'rdfextras.sparql.query', 'SPARQLQueryResult')
#=====================data for STUDENT class==============================
rdf_xml_Student_data = """<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:Student="http://www.semanticweb.org/ontologies/2013/2/Coursework.owl/Thing/Person/Student#">
<rdf:Description rdf:about="http://www.semanticweb.org/ontologies/2013/2/Coursework.owl/Thing/Person/Student/Harith">
<Student:enrolledOn>MScComputerScience</Student:enrolledOn>
<Student:studiesAt>Queen_Mary</Student:studiesAt>
</rdf:Description>
<rdf:Description rdf:about="http://www.semanticweb.org/ontologies/2013/2/Coursework.owl/Thing/Person/Student/Khalil">
<Student:enrolledOn>BScComputerScience</Student:enrolledOn>
<Student:studiesAt>Oxford_University</Student:studiesAt>
</rdf:Description>
<rdf:Description rdf:about="http://www.semanticweb.org/ontologies/2013/2/Coursework.owl/Thing/Person/Student/Ahmed">
<Student:enrolledOn>BScComputerScience</Student:enrolledOn>
<Student:studiesAt>Oxford_University</Student:studiesAt>
</rdf:Description>
</rdf:RDF>
"""
#=====================data for UNIVERSITY class==============================
rdf_xml_University_data = """<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:University="http://www.semanticweb.org/ontologies/2013/2/Coursework.owl/Thing/University#">
<rdf:Description rdf:about="http://www.semanticweb.org/ontologies/2013/2/Coursework.owl/Thing/University/Queen_Mary">
<University:UniversityLocation>London</University:UniversityLocation>
<University:UniversityRanking>36</University:UniversityRanking>
</rdf:Description>
<rdf:Description rdf:about="http://www.semanticweb.org/ontologies/2013/2/Coursework.owl/Thing/University/City_University">
<University:UniversityLocation>London</University:UniversityLocation>
<University:UniversityRanking>43</University:UniversityRanking>
</rdf:Description>
<rdf:Description rdf:about="http://www.semanticweb.org/ontologies/2013/2/Coursework.owl/Thing/University/Oxford_University">
<University:UniversityLocation>Oxford</University:UniversityLocation>
<University:UniversityRanking>2</University:UniversityRanking>
</rdf:Description>
</rdf:RDF>
"""
# -- (part1) create and RDF store in memory --
memory_store = plugin.get('IOMemory', Store)()
graph_id = URIRef(u'http://example.com/foo')
g = Graph(store=memory_store, identifier=graph_id)
g.bind('ex','http://example.com/')
g.parse(data=rdf_xml_Student_data, format="application/rdf+xml")
g.parse(data=rdf_xml_University_data, format="application/rdf+xml")
#===========================SPARQL QUERY====================================
# QUERY - select all students who study at top 10 ranked universities
results = g.query("""PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX student: <http://www.semanticweb.org/ontologies/2013/2/Coursework.owl/Thing/Person/Student#>
PREFIX university: <http://www.semanticweb.org/ontologies/2013/2/Coursework.owl/Thing/University#>
SELECT ?stu
WHERE { ?uni university:UniversityRanking ?UniversityRanking.
?stu student:studiesAt ?uni.
FILTER ( ?UniversityRanking < 10)
}
""")
print("\n============QUERY RESULTS===============\n")
for row in results.result:
print(row)
这就是我运行上述代码后三元组将如何存储在图表中的方式:
=========================STUDENT class==================================
Subject Predicate Object
========================================================================
Harith enrolledOn MScComputerScience
Harith studiesAt Queen_Mary
Khalil enrolledOn BScComputerScience
Khalil studiesAt Oxford_University
Ahmed enrolledOn BScComputerScience
Ahmed studiesAt Oxford_University
=============================UNIVERSITY class=======================
Subject Predicate Object
===============================================================
Queen_Mary UniversityLocation London
Queen_Mary UniversityRanking 36
City_University UniversityLocation London
City_University UniversityRanking 43
Oxford_University UniversityLocation Oxford
Oxford_University UniversityRanking 2