标签: rdflib

使用SPARQL进行有限的RDFS和OWL推理

我目前正在使用rdflib在Python中创建和管理RDF图.但是,RDFlib不会进行任何RDFS或OWL推理.这导致如下结果:

  1. 如果我有

    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语义).

  2. 同样的事情发生在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 rdf owl sparql rdflib

9
推荐指数
2
解决办法
1771
查看次数

如何使用RDFLib导出RDF文件中的图形

我正在尝试使用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)

python file-io export rdflib python-3.x

9
推荐指数
1
解决办法
6356
查看次数

使用Python读取Turtle/N3 RDF文件

我正在尝试用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)

python debugging semantic-web rdflib turtle-rdf

8
推荐指数
1
解决办法
6335
查看次数

如何使用RDFLib解析大数据集?

我正在尝试使用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)

python parsing rdf graph rdflib

8
推荐指数
1
解决办法
3928
查看次数

远程远程端点RDFLib/Redland上的SPARQL查询

我正在尝试查询远程端点并获取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)

python rdf sparql redland rdflib

8
推荐指数
1
解决办法
4229
查看次数

为什么 rdflib 这么慢?

我有一个很大的 rdf 文件:

  • 大小:470MB
  • 行数:近600万行
  • 独特的三重科目:约650,000
  • 三倍金额:约4,200,000

我通过以下方式将 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 rdflib

8
推荐指数
1
解决办法
1899
查看次数

SPARQL查询会产生意外结果

我希望有人可以帮助我解决这个问题,这个问题可能很容易解决:

我想针对以下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 rdf sparql rdflib

7
推荐指数
2
解决办法
828
查看次数

Apache Jena 和 Python

我一直在研究 python 中的各种关系提取模型,所有关系目前都保存在数据帧或 csv 文件中。最终我想创建一个 RDF 图。因为我在 python 中工作,所以我打算使用 RDFlib 创建 RDF 并将 RDF 读入 Apache Jena 到我可以查询的模型中。这是一个好的工作流程还是有更好的方法?

python jena rdflib

7
推荐指数
1
解决办法
3416
查看次数

使用 csv 文件作为输入创建 RDF 文件

我需要使用 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)

有人可以解释一下并举个例子吗?

python rdflib

6
推荐指数
2
解决办法
1万
查看次数

RDFLib 中的命名空间绑定

在以下最小测试用例中:

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)

python rdf rdflib turtle-rdf

6
推荐指数
1
解决办法
1559
查看次数