SPARQL查询,删除标题相同但ID不同的文章

SPARQL查询,删除标题相同但ID不同的文章,sparql,Sparql,我有一个SPARQL查询,它选择唯一的文章ID SELECT DISTINCT ?document WHERE { ?obj sem:is_referred_in__document ?doc . ?obj ann:label_lemma "lemma"@en . ?doc sem:document_ID ?document . } LIMIT 40 这很好,但问题是,在我的数据存储中,有一些相同的文章具有不同的ID,但标题相同,所以我只需要复制一份文章。我可以通

我有一个SPARQL查询,它选择唯一的文章ID

SELECT DISTINCT  ?document 
 WHERE
 { 
   ?obj sem:is_referred_in__document ?doc .
   ?obj ann:label_lemma "lemma"@en .
   ?doc sem:document_ID ?document .
 } LIMIT 40
这很好,但问题是,在我的数据存储中,有一些相同的文章具有不同的ID,但标题相同,所以我只需要复制一份文章。我可以通过以下方式访问文章标题:

?doc  rdfs:label ?label
所以我试了一下:

SELECT DISTINCT  ?document ?label
 WHERE
 { 
   ?obj sem:is_referred_in__document ?doc .
   ?obj ann:label_lemma "lemma"@en .
   ?doc sem:document_ID ?document .
   ?doc rdfs:label ?label
 } LIMIT 40

这仍然返回与第一次查询相同的结果。有什么建议我做错了什么吗?作为未来流程的回报,我只需要ID,至少有两种方法可以稍微修改第二个查询,使其更适合您的需要:

使用:

选择“将样本文档标记为id” 哪里 {?obj sem:doc文件中是否引用了。 ?对象ann:标签引理lemma@en . ?文档sem:文档ID?文档。 ?文档rdfs:标签?标签 }分组依据?标签 使用:

选择“标签”文档 哪里 {?obj sem:doc文件中是否引用了。 ?对象ann:标签引理lemma@en . ?文档sem:文档ID?文档。 ?文件rdfs:标签?标签。 筛选器不存在 {?doc1 sem:document_ID?document1。 ?doc1 rdfs:标签?标签。 过滤文档1>文档 } } 我认为,这些疑问是不言自明的

或许,您还可以整理triplestore,以未经测试的方式替换对重复文章的引用:

删去 {?obj sem:文档1中是否引用了 } 插入 {?obj sem:文档2中是否引用了 } 哪里 {?obj sem:文档doc1中是否引用了。 ?obj sem:文件2中是否提及。 ?文件1 sem:文件ID?文件1。 ?文件2 sem:文件ID?文件2。 ?doc1 rdfs:标签?标签。 ?doc2 rdfs:标签?标签。 筛选器不存在 {?doc3 sem:document_ID?document3。 ?doc3 rdfs:标签?标签。 过滤文档3>文档2 } }
如果显示一些示例数据n-Triples或Turtle语法+当前结果,则更容易理解。这也会让其他人在本地运行您的查询并查看当前结果。顺便说一下,现在还不清楚您最终想要什么。文档ID还是文章标题?我在问题的末尾提到过。我只需要文档ID。在这张图片中,您可以看到第二个查询结果:正如您可以看到的,查询返回两个具有相同标签值的不同文章ID。我只需要其中的一个。请看下面@Stanislav Kralin的答案,这是一条路要走。按标题分别分组。标签,并通过样本随机选择每个标签可能的文档集之一…编辑triplestore isn;t和选项,我没有这样做的权限,我只能选择数据,但无论如何,感谢您的支持answer@Mindaugas,你试过我回答的前两个问题了吗?他们是否返回您想要的?是的,第一个返回我需要的结果,谢谢。这里有一个简单的问题。。我想通过按创建日期对所选文章进行排序来改进查询,因此我在查询正文中添加了:ORDER by DESC?created_date?created_date但排序无效。@Mindaugas,请尝试:选择?标签样本?文档作为?id样本?创建日期作为?创建位置{?obj sem:文档中是否引用了?doc.?obj ann:标签引理lemma@en.?文档结构:文档ID?文档。?文档结构:创建日期?创建日期。?文档rdfs:标签?标签}分组依据?标签顺序依据描述?创建