访问rdf列表成员的最佳方法是什么?我正在使用rdflib(python),但在普通的SPARQL中给出的答案也可以(这种类型的答案可以通过rdfextras,一个rdflib帮助程序库使用).
我正在尝试访问由Zotero生成的rdf中的特定期刊文章的作者(为简洁起见,已删除了一些字段):
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:z="http://www.zotero.org/namespaces/export#"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:bib="http://purl.org/net/biblio#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:prism="http://prismstandard.org/namespaces/1.2/basic/"
xmlns:link="http://purl.org/rss/1.0/modules/link/">
<bib:Article rdf:about="http://www.ncbi.nlm.nih.gov/pubmed/18273724">
<z:itemType>journalArticle</z:itemType>
<dcterms:isPartOf rdf:resource="urn:issn:0954-6634"/>
<bib:authors>
<rdf:Seq>
<rdf:li>
<foaf:Person>
<foaf:surname>Lee</foaf:surname>
<foaf:givenname>Hyoun Seung</foaf:givenname>
</foaf:Person>
</rdf:li>
<rdf:li>
<foaf:Person>
<foaf:surname>Lee</foaf:surname>
<foaf:givenname>Jong Hee</foaf:givenname>
</foaf:Person>
</rdf:li>
<rdf:li>
<foaf:Person>
<foaf:surname>Ahn</foaf:surname>
<foaf:givenname>Gun Young</foaf:givenname>
</foaf:Person>
</rdf:li>
<rdf:li>
<foaf:Person>
<foaf:surname>Lee</foaf:surname>
<foaf:givenname>Dong Hun</foaf:givenname>
</foaf:Person>
</rdf:li>
<rdf:li>
<foaf:Person>
<foaf:surname>Shin</foaf:surname>
<foaf:givenname>Jung Won</foaf:givenname>
</foaf:Person>
</rdf:li>
<rdf:li>
<foaf:Person>
<foaf:surname>Kim</foaf:surname>
<foaf:givenname>Dong Hyun</foaf:givenname>
</foaf:Person>
</rdf:li>
<rdf:li>
<foaf:Person>
<foaf:surname>Chung</foaf:surname>
<foaf:givenname>Jin Ho</foaf:givenname>
</foaf:Person>
</rdf:li>
</rdf:Seq>
</bib:authors>
<dc:title>Fractional photothermolysis for the treatment of acne scars: a report of …Run Code Online (Sandbox Code Playgroud) 是否可以使用RDFLIB绘制Sesame RDF数据库的图形?这是我试过的:
endpoint = "http://127.0.0.1:8080/openrdf-workbench/repositories/movies/explore?resource=%3Cfile%3A%2F%2Fmovies_export.rdf%3E"
from rdflib import Graph
g = Graph()
g.parse(endpoint)
Run Code Online (Sandbox Code Playgroud)
这是错误:
Traceback (most recent call last):
File "C:\Software\rdflib\movieGraph.py", line 10, in <module>
g.parse(endpoint)
File "c:\python26_32bit\lib\site-packages\rdflib\graph.py", line 756, in parse
parser = plugin.get(format, Parser)()
File "c:\python26_32bit\lib\site-packages\rdflib\plugin.py", line 89, in get
raise PluginException("No plugin registered for (%s, %s)" % (name, kind))
rdflib.plugin.PluginException: No plugin registered for (application/xml, <class
'rdflib.parser.Parser'>)
Run Code Online (Sandbox Code Playgroud)
我认为唯一的技巧是指定一个正确的URL来使Sesame返回.rdf xml布局.
问题的作者:转发到http://answers.semanticweb.com/questions/9414/python-using-rdflib-to-graph-a-sesame-database(见那里的答案)
我可以在查询中包含URI和变量,但不能在查询中包含文字。
在这里,我有一些代码可以成功读取RDF文件,使用skos:prefLabels查找所有RDF三元组,对它们进行计数,然后从一组关键字中识别出几个特定的三元组:
import rdflib.plugins.sparql as sparql
import rdflib
import rdflib.graph as g
graph = g.Graph()
# Read the RDF file
graph.parse(
'h:\......SKOSTaxonomy.rdf',
format='xml')
# Build and execute the query
q = sparql.prepareQuery('SELECT ?s ?p ?o WHERE { ?s ?p ?o .}')
p = rdflib.URIRef("http://www.w3.org/2004/02/skos/core#prefLabel")
qres = graph.query(q, initBindings = {'p' : p})
print len(qres)
# Look for keywords among the results
keywords = set([u'Jackknifing', 'Technology-mapping', 'Something random'])
for (subj, pred, obj) in qres:
if obj.value in keywords:
print obj.value
Run Code Online (Sandbox Code Playgroud)
如预期的那样,此代码将输出: …
我需要编写一个程序以将三元组添加到Virtuoso三元组中,我正在使用Python和RDFLib。我已经安装了Virtuoso插件并尝试了连接,如http://pythonhosted.org/virtuoso/rdflib.html#virtuoso-storage所示。我有:
from rdflib.graph import ConjunctiveGraph as Graph
from rdflib.store import Store
from rdflib.plugin import get as plugin
from rdflib.term import URIRef, Literal
Virtuoso = plugin("Virtuoso", Store)
store = Virtuoso("DSN=VOS;UID=dba;PWD=dba;WideAsUTF16=Y")
Run Code Online (Sandbox Code Playgroud)
看来没有问题,问题是:现在呢?如何添加新的三元组?我试过了:
default_graph_uri = "http://llisa.dlsi.uji.es/productset/"
graph = Graph(store,identifier = URIRef(default_graph_uri))
graph.add((URIRef("http://llisa.dlsi.uji.es/productset#0g9x91t"),URIRef("http://xmlns.com/foaf/0.1/nick"),Literal("The Car")))
store.commit()
print graph.serialize(format='pretty-xml')
Run Code Online (Sandbox Code Playgroud)
产生以下错误:
File "/usr/local/lib/python2.7/dist-packages/virtuoso-0.12-py2.7.egg/virtuoso/vstore.py", line 345, in resolve
(value, dvtype, dttype, flag, lang, dtype) = args
ValueError: need more than 4 values to unpack
Run Code Online (Sandbox Code Playgroud)
问题是这有什么问题?以及如何正确添加三元组?谢谢。
我开始使用该rdflib库在 Python 中处理 rdf 数据。目前,我想创建一个.n3rdf 图的文件,如下所示:
@prefix ns1: <http://some.namespace/with/name#> .
@prefix ns2: <http://second.namespace/some/name#>
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
<my_example> ns1:annotated_with [ ns1:annotation
ns2: annotation_value> ] ;
ns1:name "myname" .
Run Code Online (Sandbox Code Playgroud)
也就是说,该图中有一个名为 的示例my_example,其名称为“myname”。此示例使用注释值为 的对象进行注释annotation value。我想用 Python 构建这个示例,如下所示:
import rdflib
gg=rdflib.graph.Graph()
ns1 = rdflib.Namespace('http://some.namespace/with/name#')
ns2 = rdflib.Namespace('http://second.namespace/some/name#')
u = rdflib.term.URIRef('my_example')
gg.add((u, ns1.name, rdflib.Literal('myname')))
blank = rdflib.BNode()
gg.add((u, ns1.annotated_with, blank))
gg.add((blank, ns1.annotation, ns2.annotation_value))
print gg.serialize(format='n3') …Run Code Online (Sandbox Code Playgroud) 我正在使用 rdflib 将 RDF 图加载到 Python 脚本中 我想使用定义的前缀打印主题列表 我没有找到任何应用前缀的方法。我的代码
import rdflib
filepath = "... my file path ..."
gs = rdflib.Graph()
gs.bind('qs', "http://qs.org/")
gs.bind('foaf',"http://xmlns.com/foaf/0.1/")
gs.parse(filepath,format="nt")
mdstr = ""
for subject in gs.subjects():
mdstr += str(subject) +"\n"
print(mdstr)
Run Code Online (Sandbox Code Playgroud)
例如,我得到 http://qs.org/s12095 代替 qs:s12095
在使用RDFLib 3.0的Python脚本中,在序列化三元组时,我得到以下XML-Output:
<rdf:RDF
xmlns:_3="http://www.my-example.intra/ontologies/ci.owl#"
>
Run Code Online (Sandbox Code Playgroud)
如何为RDFLib(或者分别是XML-Serializer)自动分配的匿名_x-前缀定义特定的名称空间前缀?
<rdf:RDF
xmlns:ex="http://www.my-example.intra/ontologies/ci.owl#"
>
Run Code Online (Sandbox Code Playgroud)
非常感谢您的回复!
虽然我在网上经历了很多例子,解释了如何使用python SPARQLWrapper使用SELECT语句从sesame triple store中获取数据,但不知道如何使用它来在芝麻中INSERT/DELETE/UPDATE语句.你们中的任何人都可以在这方面提供指导.
谢谢
我希望尽可能小,但仍然是自我一致的,并且使用RDFLib中的SPARQL.我有RDFLib版本'4.0.1'.
我想有一个代码执行以下操作
添加
我自己尝试(首先没有写入和读取文件),我无法做到.这就是我所拥有的:
import rdflib
g = rdflib.ConjunctiveGraph()
has_border_with = rdflib.URIRef('www.example.org/has_border_with')
located_in = rdflib.URIRef('www.example.org/located_in')
germany = rdflib.URIRef('www.example.org/country1')
france = rdflib.URIRef('www.example.org/country2')
china = rdflib.URIRef('www.example.org/country3')
mongolia = rdflib.URIRef('www.example.org/country4')
europa = rdflib.URIRef('www.example.org/part1')
asia = rdflib.URIRef('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))
x = g.query("""select ?country where { ?country www.example.org/located_in www.example.org/part1 }""")
print x
Run Code Online (Sandbox Code Playgroud)
结果我得到:
Traceback (most recent call last):
File "hello_world.py", line 23, in <module>
x = g.query("""select ?country where { ?country www.example.org/located_in www.example.org/part1 }""")
File "/usr/local/lib/python2.7/dist-packages/rdflib-4.0.1-py2.7.egg/rdflib/graph.py", …Run Code Online (Sandbox Code Playgroud)