python中用rdflib生成rdf,用sparql查詢
阿新 • • 發佈:2019-02-19
接下來,上我的程式碼~ 其實,根據三元組的模式
# coding:utf-8
import rdflib
def create():
g = rdflib.Graph()
has_border_with = rdflib.URIRef('http://www.example.org/has_border_with')
located_in = rdflib.URIRef('http://www.example.org/located_in')
##############
germany = rdflib.URIRef('http://www.example.org/country1' )
france = rdflib.URIRef('http://www.example.org/country2')
china = rdflib.URIRef('http://www.example.org/country3')
mongolia = rdflib.URIRef('http://www.example.org/country4')
##############
europa = rdflib.URIRef('http://www.example.org/part1')
asia = rdflib.URIRef('http://www.example.org/part2' )
##############
g.add((germany, has_border_with, france))
g.add((china, has_border_with, mongolia))
g.add((germany, located_in, europa))
g.add((france, located_in, europa))
g.add((china, located_in, asia))
g.add((mongolia, located_in, asia))
##############
# c3,has,c4
# c3,loc,p2
g.serialize("graph.rdf")
def query():
g = rdflib.Graph()
g.parse("graph.rdf", format="xml")
################################
# <a,?,?>
q = "select ?relation ?part where { <http://www.example.org/country1> ?relation ?part}"
x = g.query(q)
t = list(x) ##### 二維
# print(t[0][0])
# http://www.example.org/has_border_with
# print(t[0][1])
# http://www.example.org/part1
print(len(t)) #沒有,則=0
print(t[0])
# <?,b,?>
q = "select ?country ?part where {?country <http://www.example.org/located_in> ?part}"
x = g.query(q)
t = list(x)
print(len(t))
print(t[0])
# <?,?,c>
q = "select ?country ?relation where {?country ?relation <http://www.example.org/part1>}"
x = g.query(q)
t = list(x)
print(len(t))
print(t[0])
################################
# <a,b,?>
q = "select ?part where {<http://www.example.org/country1> <http://www.example.org/located_in> ?part}"
x = g.query(q)
t = list(x) ######二維: n*1
print(len(t))
# print(t[0][0])
# http://www.example.org/part1
print(t[0])
# <a,?,c>
# <?,a,b>
if __name__ == "__main__":
create()
query()
graph.rdf:
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
xmlns:ns1="http://www.example.org/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>
<rdf:Description rdf:about="http://www.example.org/country3">
<ns1:located_in rdf:resource="http://www.example.org/part2"/>
<ns1:has_border_with rdf:resource="http://www.example.org/country4"/>
</rdf:Description>
<rdf:Description rdf:about="http://www.example.org/country1">
<ns1:has_border_with rdf:resource="http://www.example.org/country2"/>
<ns1:located_in rdf:resource="http://www.example.org/part1"/>
</rdf:Description>
<rdf:Description rdf:about="http://www.example.org/country2">
<ns1:located_in rdf:resource="http://www.example.org/part1"/>
</rdf:Description>
<rdf:Description rdf:about="http://www.example.org/country4">
<ns1:located_in rdf:resource="http://www.example.org/part2"/>
</rdf:Description>
</rdf:RDF>