首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python rdflib传递查询

python rdflib传递查询
EN

Stack Overflow用户
提问于 2016-10-22 01:17:33
回答 1查看 203关注 0票数 1

我刚开始使用rdflib,我的问题也很简单。我有几个包含大量数据的n-三元组文件,虽然每个文件在其主题中具有相同的域,但对象中的域对于每个文件是不同的。现在我想输入一个或多个文件,并将它们与数据集中的所有其他文件进行比较,以获得包含相同主题的三元组:

代码语言:javascript
复制
[selected file]
a owl:sameAs b

[other files]
a owl:sameAs c
a owl:sameAs d

应该会产生以下输出:

代码语言:javascript
复制
b owl:sameAs c
b owl:sameAs d

我目前的方法非常幼稚,而且耗时太长,因为我迭代了所选文件中的所有三元组,如果它包含相同的主语和谓词,它会检查每隔一个三元组。

代码语言:javascript
复制
...
for mainGraph in mainGraphs:
    for s,p,o in mainGraph:
        for graph in graphs:
            for s1,p1,o1 in graph:
                if s == s1 and p == p1:
                    backlinks.add( (o, OWL.sameAs, o1) )
...

我试图插入一个SPARQL查询,但也不起作用:

代码语言:javascript
复制
...
for mainGraph in mainGraphs:
    for graph in graphs:
        union = mainGraph + graph 
        qres = union.query(
        """SELECT DISTINCT ?x ?y
            WHERE
            {
              ?x owl:sameAs+ ?y .
            }""")
...

我的问题是,是否有一种更快、更简单的方法可以做同样的事情。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2016-10-22 22:47:45

在查看了更多的rdflib文档后,我想出了以下解决方案:

代码语言:javascript
复制
...
for mainGraph in mainGraphs:
    for s,p,o in mainGraph.triples( (None, OWL.sameAs, None) ):
        for graph in graphs:
            for s1,p1,o1 in graph.triples( (s,p,None) ):
                backlinks.add( (o1, OWL.sameAs, o) )
...

这是相当快的。如果有人有一个更快的解决方案,我将非常感谢,如果他们会张贴它。

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

https://stackoverflow.com/questions/40182210

复制
相关文章

相似问题

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