我正在使用RDFLIB在带有ntriples的3个数据集(A,B,C)之间构建图形.
目标:图表包含那些数据集A-> B,B-> C和C-> A之间的链接,我想通过确保从A传出的链接引用回A中的相同条目来检查这些链接的一致性.
问题:一旦我迭代了A-> B中的链接,我想在B-> C中查找相应的条目(可能不止一个),而对于C-> A则相同,是否有办法通过了解主题而不迭代所有条目来查找对象?
我想owl:在我的RDF本体的XML序列化中使用前缀(使用rdflib版本4.1.1); 不幸的是,我仍然将序列化作为rdf:Description标记.我已经看过关于将命名空间绑定到RDFLib上的图形的答案:XML序列化中的命名空间前缀,但这似乎仅在使用ns格式而不是xml格式进行序列化时才起作用.
让我们更具体一点.我试图在XML中获得以下本体(如引入RDFS和OWL),如下所示:
<!-- OWL Class Definition - Plant Type -->
<owl:Class rdf:about="http://www.linkeddatatools.com/plants#planttype">
<rdfs:label>The plant type</rdfs:label>
<rdfs:comment>The class of all plant types.</rdfs:comment>
</owl:Class>
Run Code Online (Sandbox Code Playgroud)
这是用于构造这样的东西的python代码,使用rdflib:
from rdflib.namespace import OWL, RDF, RDFS
from rdflib import Graph, Literal, Namespace, URIRef
# Construct the linked data tools namespace
LDT = Namespace("http://www.linkeddatatools.com/plants#")
# Create the graph
graph = Graph()
# Create the node to add to the Graph
Plant …Run Code Online (Sandbox Code Playgroud) 我是 Python RDFLIB 的新手。我在这里找到了这个创建图表的例子。可视化此代码创建的图形的最简单方法是什么?
import rdflib
# Now we create a graph, a representaiton of the ontology
g = rdflib.Graph()
# Now define the key words that we will use (the edge weights of the graph)
has_border_with = rdflib.URIRef('http://www.example.org/has_border_with')
located_in = rdflib.URIRef('http://www.example.org/located_in')
# define the things - base level objects that will be the nodes
# In this case first we have countries
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')
# then we have continents …Run Code Online (Sandbox Code Playgroud) 我有一个 NT 格式的大型 RDF 数据集(Geonames 数据集:18GB)。我想通过使用将其加载到 PostgreSQL 关系表中rdflib_sqlalchemy.SQLAlchemy。我知道这是可行的(对存储在关系数据库中的 rdf 数据执行 sparql 查询)。但是,我不确定如何。你能给我举个例子吗?
我的下一个目标是使用 RDFLib 从 python 编写 SPARQL 查询。我知道该怎么做。在此先感谢您的帮助。
我正在编写一个C库,它将特定于域的数据解析并序列化为RDF/XML.解析文件并再次将其写回后,我希望能够检查内容是否未更改.
我可以再次解析所有内容,将其写为NTriples,并逐行比较两个Ntriples文件但是必须有更好的方法吗?
谢谢!
我有一个rdf文件,例如:
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dbp="http://dbpedia.org/ontology/"
xmlns:dbprop="http://dbpedia.org/property/"
xmlns:foaf="http://xmlns.com/foaf/0.1/">
<rdf:Description rdf:about="http://dbpedia.org/page/Johann_Sebastian_Bach">
<dbp:birthDate>1685-03-21</dbp:birthDate>
<dbp:deathDate>1750-07-28</dbp:deathDate>
<dbp:birthPlace>Eisenach</dbp:birthPlace>
<dbp:deathPlace>Leipzig</dbp:deathPlace>
<dbprop:shortDescription>German composer and organist</dbprop:shortDescription>
<foaf:name>Johann Sebastian Bach</foaf:name>
<rdf:type rdf:resource="http://dbpedia.org/class/yago/GermanComposers"/>
<rdf:type rdf:resource="http://xmlns.com/foaf/0.1/Person"/>
</rdf:Description>
</rdf:RDF>
Run Code Online (Sandbox Code Playgroud)
而且我只想提取这个文件的文本部分,即在这种情况下我的输出是:
output_ tex = "Johann Sebastian Bach, German composer and organist,1685-03-21, 1750-07-28, Eisenach, Leipzig"
Run Code Online (Sandbox Code Playgroud)
如何使用RDFlib获得此结果?
我正在尝试学习 SPARQL,并使用 python 的 rdflib 进行训练。我已经做了几次尝试,但任何 ASK 查询似乎总是给我返回 True 结果。例如,我尝试了以下方法:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import rdflib
mygraph=rdflib.Graph();
mygraph.parse('try.ttl',format='n3');
results=mygraph.query("""
ASK {?p1 a <http://false.com>}
""")
print bool(results)
Run Code Online (Sandbox Code Playgroud)
即使“try.ttl”中没有 false.com 类型的主题,结果也是 true。谁能解释一下为什么?预先感谢您的帮助!
更新:阅读 rdflib 手册,我发现结果是列表类型,并且(在我的例子中)应该包含一个带有询问查询返回值的布尔值。我尝试了以下操作: for x in results: print x 我得到“无”。我猜我没有以正确的方式使用查询方法。
我将数据库解析为 RDFlib 图。我现在想将该图中的三元组插入到 GraphDB 三元组存储中。当我在 Sesame 上托管的旧版本 GraphDB-Lite 上执行该代码时,该代码运行良好。但是,在现在独立的 GraphDB 7.0.0 上执行相同的查询时出现错误。在引发错误之前,该图已被部分解析,并且插入的三元组确实显示在三元组存储中。
这是代码的一部分:
graphdb_url = 'http://my.ip.address.here:7200/repositories/Test3/statements'
##Insert into Sesame
for s,p,o in graph1:
pprint.pprint ((s,p,o))
queryStringUpload = 'INSERT DATA {%s %s %s}' %(s,p,o)
# queryStringUpload = 'DELETE WHERE {?s ?p ?o .}'
# print queryStringUpload
sparql = SPARQLWrapper(graphdb_url)
sparql.method = 'POST'
sparql.setQuery(queryStringUpload)
sparql.query()
Run Code Online (Sandbox Code Playgroud)
以下是错误:
ARQLWrapper.SPARQLExceptions.QueryBadFormed: QueryBadFormed: a bad request has been sent to the endpoint, probably the sparql query is bad formed.
Response:
MALFORMED QUERY: Lexical error at line 1, …Run Code Online (Sandbox Code Playgroud) 我对链接数据和 rdflib 很陌生,我很迷失。我正在尝试使用 rdflib 使用“Sleepycat”创建持久性存储来加载 DBLP 数据库 rdf 文件,然后开始查询它。这就是我所做的:
import rdflib
graph = rdflib.Graph("Sleepycat")
graph.open("C:\Users\Maral\Desktop\Springer-DBLP\Mydblp", create=True)
graph.parse("C:\Users\Maral\Desktop\dblp.rdf", format = 'xml')
Run Code Online (Sandbox Code Playgroud)
花了将近2个小时,但现在看来dblp.rdf已被加载、解析并存储在Mydblp中。但len(graph)返回0,我不知道如何访问数据并查询它。
我是否缺少任何步骤?数据加载正确吗?所有示例都是关于向图中添加三元组,但我只想查询已经存在的内容。
谢谢。
我一直在与 DBpedia 合作进行 GSoC 项目。我必须使用存储在另一个文件中的属性创建三元组。
例如。我的主文件是main.py,包含所有规则的文件是rules.py.
这是我正在尝试/想要做的:
规则.py
mapping_rules = {
'family': 'relatedTo',
'singer': 'MusicalArtist',
'writer': 'Author'
}
Run Code Online (Sandbox Code Playgroud)
主文件
import rules
import rdflib
dbo = rdflib.Namespace("http://dbpedia.org/ontology/")
dbr = rdflib.Namespace("http://dbpedia.org/resource/")
uri = "something"
res = "something"
p = mapping_rules[input()]
g.add((rdflib.URIRef(uri), dbo.p, rdflib.URIRef(res)))
Run Code Online (Sandbox Code Playgroud)
我希望动态决定三元组的属性。
如果我'dbo.relatedTo'在 中用作值mapping_rules.py,它会显示错误:Predicate dbo.related must be an rdflib term.
如果我使用dbo.relatedToas 值 in mapping_rules.py,它会抛出名称错误:dbo is not defined.
如果我使用relatedToinmapping_rules.py并使用上面的代码,它会添加一个三元组,但属性变为dbo:p,而我想要dbo:relatedTo.
我被困在这里,有人可以帮忙吗?谢谢!!
rdflib ×10
python ×8
rdf ×5
linked-data ×2
sparql ×2
c ×1
dbpedia ×1
graphdb ×1
owl ×1
plot ×1
postgresql ×1
semantic-web ×1
sqlalchemy ×1
text ×1
xml-parsing ×1