-1

我有 2 个 sparql 查询,但它们不返回正确的结果(三元组) 第一个返回正确的结果,但遗漏了一些三元组 第二个返回所有正确的三元组,但格式不正确,实际上我不想显示 uri 1:

SELECT  distinct  ?s ?v ?o  WHERE {
    {        ?s2 pred:relationsubject ?s_urii .
        ?s_urii pred:name ?s . 
        ?s2 pred:relationobject ?o .
        ?s2 pred:verb ?v . 

    }

结果:

1   MM  mismanage   H
2   HC  take            T
3   HC  be          D
4   HC  face            P

2:

SELECT  distinct  ?s_urii ?v ?o  WHERE {
{        ?s2 pred:relationsubject ?s_urii .
    ?s2 pred:relationobject ?o .
    ?s2 pred:verb ?v . 

}

结果:

 1  http://5a0  mismanage   H
2   http://6b1  take            T
3   http://6b1  be          D
4   http://6b1  face            P
5   http://5a0  make with   G
6   http://6b1  not make    TN
7   http://6b0  have            TL

这些 URI(http://5a0,http://5b1...)对应于数据库中的主题 (MM,HC...)。谁能告诉我这个问题?我正在使用 ARC Triplestore,因此三元组存储在 mysql 数据库中,并且我使用 php 语言来执行我的查询。您在此链接中找到包含数据的文件在此处输入链接描述

我也试过这个查询,但它没有给我所有的记录:

SELECT  distinct  ?s ?v ?o  WHERE {
    {        ?s2 pred:relationsubject ?s_urii .
        ?s_urii pred:name ?s . 
        ?s2 pred:relationobject ?o .
        ?s2 pred:verb ?v . 

    }
4

1 回答 1

0

bibi,您的问题并不完全清楚,从您的 sparql 查询的外观来看,我判断您对 sparql 绝对是新手,并且已经尝试了许多导致您从 ?s 到 ?s1 到 ?s2 到 ?s_urii 的事情......我会说那是四个小时的尝试和捕捉..没有浪费我相信你学到了一些东西;-)(顺便说一下,上面查询中的花括号是不平衡的,不能像上面那样运行)

现在,rdf(想象一下 rdf 是一个包含三列的大表,一列用于主语,一列用于谓词,一列用于三元组的宾语)和相应的查询语言(sparql)是您知道的两个非常简单的东西你在做。

  1. 首先运行以下查询并查看数据,因此您至少对主语、谓语和宾语有一定的了解。

    SELECT ?s ?p ?o WHERE { ?s ?p ?o } LIMIT 100
    

这转化为人类语言:告诉我所有有三元组的地方。并将主题列中的值绑定到变量?s,将谓词列中的值绑定到?p,将对象列中的值绑定到变量?o。

  1. 检查发生了什么,当你这样做:

    SELECT ?s WHERE { ?s ?p ?o } LIMIT 100
    
    SELECT ?p WHERE { ?s ?p ?o } LIMIT 100
    
    SELECT ?o WHERE { ?s ?p ?o } LIMIT 100
    
    SELECT DISTINCT ?s WHERE { ?s ?p ?o } LIMIT 100
    
    SELECT DISTINCT ?p WHERE { ?s ?p ?o } LIMIT 100
    
    SELECT DISTINCT ?o WHERE { ?s ?p ?o } LIMIT 100
    

也试试

SELECT DISTINCT ?UNDEF WHERE { ?s ?p ?o } LIMIT 100 

请注意 ?s ?p ?o 只是变量名,如果你愿意,你也可以用 ?cat ?dog ?bird 替换它们。另请注意,sparql 选择查询返回绑定而不是三元组。

如果第二个查询包含您所追求的绑定并且您只想删除 ?s_urii,那么就不要选择它。

SELECT  distinct ?v ?o  WHERE {
?s2 pred:relationobject ?o .
?s2 pred:verb ?v . 
}
于 2014-06-02T17:21:15.283 回答