我目前正在使用rdflib在Python中创建和管理RDF图.但是,RDFlib不会进行任何RDFS或OWL推理.这导致如下结果:
如果我有
A rdf:type MyType .
MyType rdfs:subClassOf SuperType .
Run Code Online (Sandbox Code Playgroud)
我问
select ?x where {?x rdf:type SuperType}
Run Code Online (Sandbox Code Playgroud)
然后我什么都没得到,但我想得到A
(通过RDFS语义).
同样的事情发生在owl:equivalentClass
.如果我有
A rdf:type MyType .
MyType owl:equivalentClass SiblingType .
Run Code Online (Sandbox Code Playgroud)
我问
select ?x where {?x rdf:type SiblingType}
Run Code Online (Sandbox Code Playgroud)
我想得到A
,但我一无所获.
有没有办法获得这些结果?
我正在尝试使用Python 3.4中的RDFLib生成RDF数据.
一个最小的例子:
from rdflib import Namespace, URIRef, Graph
from rdflib.namespace import RDF, FOAF
data = Namespace("http://www.example.org#")
g = Graph()
g.add( (URIRef(data.Alice), RDF.type , FOAF.person) )
g.add( (URIRef(data.Bob), RDF.type , FOAF.person) )
g.add( (URIRef(data.Alice), FOAF.knows, URIRef(data.Bob)) )
#write attempt
file = open("output.txt", mode="w")
file.write(g.serialize(format='turtle'))
Run Code Online (Sandbox Code Playgroud)
此代码导致以下错误:
file.write(g.serialize(format='turtle'))
TypeError : must be str, not bytes
Run Code Online (Sandbox Code Playgroud)
如果我用以下内容替换最后一行:
file.write(str(g.serialize(format='turtle')))
Run Code Online (Sandbox Code Playgroud)
我没有得到错误,但结果是二进制流的字符串表示(单行文本开头b'
):
b'@prefix ns1: <http://xmlns.com/foaf/0.1/> .\n@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .\n@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\n@prefix xml: <http://www.w3.org/XML/1998/namespace> .\n@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .\n\n<http://www.example.org#Alice> a ns1:person ;\n ns1:knows <http://www.example.org#Bob> .\n\n<http://www.example.org#Bob> …
Run Code Online (Sandbox Code Playgroud) 我正在尝试用Turtle格式编码一些植物数据,并使用RDFLib从Python读取这些数据.但是,我遇到了麻烦,我不确定是不是因为我的海龟畸形或者我在滥用 RDFLib.
我的测试数据是:
@PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@PREFIX p: <http://www.myplantdomain.com/plant/description> .
p:description a rdfs:Property .
p:name a rdfs:Property .
p:language a rdfs:Property .
p:value a rdfs:Property .
p:gender a rdfs:Property .
p:inforescence a rdfs:Property .
p:color a rdfs:Property .
p:sense a rdfs:Property .
p:type a rdfs:Property .
p:fruit a rdfs:Property .
p:flower a rdfs:Property .
p:dataSource a rdfs:Property .
p:degree a rdfs:Property .
p:date a rdfs:Property .
p:person a rdfs:Property . …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用RDFLib 3.0解析几个大图,显然它处理第一个并在第二个上死(MemoryError)...看起来MySQL不再作为商店支持,你能建议一种方法以某种方式解析那些?
Traceback (most recent call last):
File "names.py", line 152, in <module>
main()
File "names.py", line 91, in main
locals()[graphname].parse(filename, format="nt")
File "/usr/local/lib/python2.6/dist-packages/rdflib-3.0.0-py2.6.egg/rdflib/graph.py", line 938, in parse
location=location, file=file, data=data, **args)
File "/usr/local/lib/python2.6/dist-packages/rdflib-3.0.0-py2.6.egg/rdflib/graph.py", line 757, in parse
parser.parse(source, self, **args)
File "/usr/local/lib/python2.6/dist-packages/rdflib-3.0.0-py2.6.egg/rdflib/plugins/parsers/nt.py", line 24, in parse
parser.parse(f)
File "/usr/local/lib/python2.6/dist-packages/rdflib-3.0.0-py2.6.egg/rdflib/plugins/parsers/ntriples.py", line 124, in parse
self.line = self.readline()
File "/usr/local/lib/python2.6/dist-packages/rdflib-3.0.0-py2.6.egg/rdflib/plugins/parsers/ntriples.py", line 151, in readline
m = r_line.match(self.buffer)
MemoryError
Run Code Online (Sandbox Code Playgroud) 我正在尝试查询远程端点并获取owl:sameAs映射,我已经尝试了RDFLib和Redland,但都没有为我工作,可能我没有正确处理名称空间.
这是我在RDFLib中的尝试:
import rdflib
rdflib.plugin.register('sparql', rdflib.query.Processor, 'rdfextras.sparql.processor', 'Processor')
rdflib.plugin.register('sparql', rdflib.query.Result, 'rdfextras.sparql.query', 'SPARQLQueryResult')
g = rdflib.Graph()
query = """
SELECT *
FROM <http://api.talis.com/stores/bbc-backstage/services/sparql>
WHERE {
?s a http://purl.org/ontology/mo/MusicArtist;
http://www.w3.org/2002/07/owl#sameAs ?o .
}Limit 50
"""
for row in g.query(query):
print row
Run Code Online (Sandbox Code Playgroud)
这里是雷德兰:
import RDF
model = RDF.Model()
query = """
SELECT *
FROM <http://api.talis.com/stores/bbc-backstage/services/sparql>
WHERE {
?s a http://purl.org/ontology/mo/MusicArtist;
http://www.w3.org/2002/07/owl#sameAs ?o .
}Limit 50
"""
for statement in RDF.Query(query ,query_language="sparql").execute(model):
print statement
Run Code Online (Sandbox Code Playgroud)
你能不能暗示其中任何一个出了什么问题?我有另一个困难:是否有可能获得对象的数据集名称?例如:如果有:
?s = http://www.bbc.co.uk/music/artists/eb5c8564-927d-414d-b152-c7b48a2c9d8b#artist
predicate = http://www.w3.org/2002/07/owl#sameAs
?0 = http://dbpedia.org/resource/The_Boy_Least_Likely_To …
Run Code Online (Sandbox Code Playgroud) 我有一个很大的 rdf 文件:
我通过以下方式将 rdf 定义加载到 rdflib 的 berkeley db 后端:
graph = rdflib.Graph("Sleepycat")
graph.open("store", create=True)
graph.parse("authorities-geografikum_lds.rdf")
Run Code Online (Sandbox Code Playgroud)
在我的笔记本上花了很多小时才完成。计算机的功能并不强大(Intel B980 CPU、4GB RAM、无 SSD),而且定义也很大,但完成这项任务的时间似乎相当长。也许部分是由于索引/优化数据结构?
真正令人恼火的是完成以下查询所需的时间:
SELECT (COUNT(DISTINCT ?s) as ?c)
WHERE {
?s ?p ?o
}
Run Code Online (Sandbox Code Playgroud)
(结果:667,445)
花了20多分钟
SELECT (COUNT(?s) as ?c)
WHERE {
?s ?p ?o
}
Run Code Online (Sandbox Code Playgroud)
(结果:4,197,399)
花了超过25分钟。
根据我的经验,如果有适当的索引,充满可比数据的关系型 DBMS 将在一小部分时间内完成相应的查询。
所以我的问题是:
为什么 rdflib 这么慢(尤其是对于查询)?
我可以像使用 RDBMS 中的索引一样调整/优化数据库吗?
从性能角度来看,另一个(免费且“紧凑”)三重存储是否更适合这种大小的数据?
我希望有人可以帮助我解决这个问题,这个问题可能很容易解决:
我想针对以下RDF运行SPARQL查询(在N3中注明,RDF/XMl位于此处).这是期刊文章的描述以及期刊,作者和出版商的描述:
@prefix bibo: <http://purl.org/ontology/bibo/> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix ex: <http://example.org/thesis/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
<ex:XY> a bibo:Article;
dc:creator ex:umstaetter;
dc:date "2008-11-01";
dc:isPartOf ex:bibdienst;
dc:title "DDC in Europa"@de;
bibo:endPage "1221";
bibo:issue "11";
bibo:language "de";
bibo:pageStart "1194";
bibo:uri <http://www.zlb.de/Erschliessung020309BD.pdf>;
bibo:volume "42" .
<ex:bibdienst> a bibo:Journal;
dc:publisher ex:zlb;
dc:title "Bibliotheksdienst"@de;
bibo:issn "00061972" .
<ex:umstaetter> a foaf:person;
foaf:birthday "1941-06-12";
foaf:gender "Male";
foaf:givenName "Walther";
foaf:homepage <http://www.ib.hu-berlin.de/~wumsta/index.html>;
foaf:img "http://libreas.eu/ausgabe7/pictures/wumstaetter1.jpg";
foaf:name "Walther Umst\u00E4tter";
foaf:surname "Umst\u00E4tter";
foaf:title "Prof. …
Run Code Online (Sandbox Code Playgroud) 我一直在研究 python 中的各种关系提取模型,所有关系目前都保存在数据帧或 csv 文件中。最终我想创建一个 RDF 图。因为我在 python 中工作,所以我打算使用 RDFlib 创建 RDF 并将 RDF 读入 Apache Jena 到我可以查询的模型中。这是一个好的工作流程还是有更好的方法?
我需要使用 rdflib 将 csv 文件转换为 rdf,我已经有了读取 csv 的代码,但我不知道如何将其转换为 rdf。
我有以下代码:
import csv
from rdflib.graph import Graph
# Open the input file
with open('data.csv', 'rb') as fcsv:
g = Graph()
csvreader = csv.reader(fcsv)
y = True
for row in csvreader:
if y:
names = row
y = False
else:
for i in range(len(row)):
continue
print(g.serialize(format='xml'))
fcsv.close()
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下并举个例子吗?
在以下最小测试用例中:
from rdflib import Graph, Namespace, Literal, RDF
base = "http://test.com/ns"
foobar = Namespace("http://test.com/ns#")
g = Graph(base=base)
g.bind('foobar', foobar)
g.add((foobar.something, RDF.type, Literal('Blah')))
g.add((foobar.something, foobar.contains, Literal('a property')))
g.add((foobar.anotherthing, RDF.type, Literal('Blubb')))
g.add((foobar.anotherthing, foobar.contains, Literal('another property')))
print(g.serialize(format='turtle').decode("utf-8"))
Run Code Online (Sandbox Code Playgroud)
我明白了
@base <http://test.com/ns> .
@prefix foobar: <http://test.com/ns#> .
<#anotherthing> a "Blubb" ;
ns1:contains "another property" .
ns1:something a "Blah" ;
ns1:contains "a property" .
Run Code Online (Sandbox Code Playgroud)
我期望的更像是
@base <http://test.com/ns> .
@prefix foobar: <http://test.com/ns#> .
<#anotherthing> a "Blubb" ;
foobar:contains "another property" .
<#something> a "Blah" ;
foobar:contains "a …
Run Code Online (Sandbox Code Playgroud) rdflib ×10
python ×9
rdf ×6
sparql ×4
turtle-rdf ×2
debugging ×1
export ×1
file-io ×1
graph ×1
jena ×1
owl ×1
parsing ×1
python-3.x ×1
redland ×1
semantic-web ×1