我试图理解RDFlib中集合操作(并集、加法、交集、差分、异或)的逻辑,并使用相同的文件进行了一些测试,结果与我天真的期望不符。因此,我用两种方法测试了“in”操作符:
在从一个小小的RDF/Turtle测试文件初始化A并初始化B之后,我遍历了图A中的所有项目,并检查它们是否存在于图B中:
A = Graph()
A.parse("A.ttl", format='turtle')
B=A
for t in A.triples((None, None, None)):
if t in B:
print(f"found {t} in B")
else:
print(f"didn't find {t} in B")
A = Graph()
A.parse("A.ttl", format='turtle')
B = Graph()
B.parse("A.ttl", format='turtle')
for t in A.triples((None, None, None)):
if t in B:
print(f"found {t} in B")
else:
print(f"didn't find {t} in B")
在案例1)中,A中的所有三联体也在B中发现——正如预期的那样 在案例2)中,在B中也只发现了A中的部分三联体(没有B节点的)
有没有办法避免案例2的行为。。还是我误解了一些非常基本的东西?(我是RDF新手,但在其他方面并不害怕图形)
干杯 乔尔
空白节点在图形外没有标识。如果使用空白节点处理同一个文件两次,则应该预期空白节点会获得不同的内部标识符
作为参考,section 3.5 of the RDF 1.1 Concepts and Abstract Syntax解释:
因此,为了解决这个问题,您可以为空白节点提供一个IRI,该IRI在处理内存中的图形之后仍然存在。参考部分提供了有关如何铸造此类IRIs的指南
相关问题 更多 >
编程相关推荐