首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将`rdflib.Dataset`序列化为默认图形?

将`rdflib.Dataset`序列化为默认图形?
EN

Stack Overflow用户
提问于 2022-06-02 17:53:15
回答 2查看 64关注 0票数 0

我希望通过使用rdflib.Datasetds.parse(...)将数据解析为默认的图形。当我试图序列化到application/trigapplication/n-quads时,我可以看到默认的图三元组位于一个空节点下面。

有没有办法强制使用ds.add(...)ds.parse(...)添加的三元组在默认图形下?

示例:

代码语言:javascript
复制
from rdflib import Dataset
from rdflib.term import URIRef

ds = Dataset()

# Parse into Default Graph.
ds.parse(data='<df:s> <df:p> <df:o>.')

# Parse into Named Graph '<ng:g>'.
g = ds.graph(URIRef('ng:g'))
g.parse(data='<ng:s> <ng:p> <ng:o>.')

ds_nquads = ds.serialize(format='nquads')
print(ds_nquads)

输出:

代码语言:javascript
复制
<ng:s> <ng:p> <ng:o> <ng:g> .
<df:s> <df:p> <df:o> _:Nbd6d6df5e4cb4348980c2d6ff511d6ce .
EN

回答 2

Stack Overflow用户

发布于 2022-06-21 23:30:42

g.add()Graphg添加了三倍,但是d.add()可以向Datasetd添加四元,所以您当然可以使用add((subject, predicate, object, graph)),参见数据集文档

还可以尝试Dataset示例文件,它的大部分数据集操作都显示在其中:https://github.com/RDFLib/rdflib/blob/master/examples/datasets.py

票数 0
EN

Stack Overflow用户

发布于 2022-07-14 21:59:42

我认为问题可能在于parse()如何与Dataset协同工作。三元组似乎不像人们所期望的那样进入Dataset中的默认图,而是进入由空白节点标识的图中。

至于解决方法,如果使用Dataset.add(),用三元组而不是四值调用它,它们将进入默认图,从这里的trig输出可以看到:

示例1(添加,带有trig输出):

代码语言:javascript
复制
from rdflib import Dataset
from rdflib.term import URIRef

ds = Dataset()

# Add into Default Graph.
ds.add((URIRef('df:s'), URIRef('df:p'), URIRef('df:o')))

# Add into Named Graph '<ng:g>'.
g = ds.graph(URIRef('ng:g'))
g.add((URIRef('ng:s'), URIRef('ng:p'), URIRef('ng:o')))

ds_trig = ds.serialize(format='trig')
print(ds_trig)

产出1:

代码语言:javascript
复制
@prefix ns1: <ng:> .
@prefix ns2: <urn:x-rdflib:> .
@prefix ns3: <df:> .

ns1:g {
    ns1:s ns1:p ns1:o .
}

{
    ns3:s ns3:p ns3:o .
}

但是,n-quad序列化可能还有另一个问题,因为它似乎没有从输出中省略默认的图形标签,而是显示默认图形的rdflib Dataset内部URI。(上面的trig序列化忽略了它,但是在它输出的命名空间绑定中可以看到它的踪迹。)

示例2 (add,具有n个四元输出):

代码语言:javascript
复制
from rdflib import Dataset
from rdflib.term import URIRef

ds = Dataset()

# Add into Default Graph.
ds.add((URIRef('df:s'), URIRef('df:p'), URIRef('df:o')))

# Add into Named Graph '<ng:g>'.
g = ds.graph(URIRef('ng:g'))
g.add((URIRef('ng:s'), URIRef('ng:p'), URIRef('ng:o')))

ds_nquads = ds.serialize(format='nquads')
print(ds_nquads)

产出2:

代码语言:javascript
复制
<df:s> <df:p> <df:o> <urn:x-rdflib:default> .
<ng:s> <ng:p> <ng:o> <ng:g> .

用rdflib 6.1.1进行了测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72480401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档