Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何使用SPARQL查询两个事物之间的距离_Xml_Rdf_Semantic Web - Fatal编程技术网

Xml 如何使用SPARQL查询两个事物之间的距离

Xml 如何使用SPARQL查询两个事物之间的距离,xml,rdf,semantic-web,Xml,Rdf,Semantic Web,我用RDF/XML创建了一个地铁地图,想知道如何查询两站之间的距离。我对SPARQL非常陌生,不知道如何开始 “距离”是指,我想知道,两个车站之间有多少个车站。稍后,我想计算持续时间,但这是另一点 这是我的第一个方法: PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX ex: <ht

我用RDF/XML创建了一个地铁地图,想知道如何查询两站之间的距离。我对SPARQL非常陌生,不知道如何开始

“距离”是指,我想知道,两个车站之间有多少个车站。稍后,我想计算持续时间,但这是另一点

这是我的第一个方法:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ex: <http://example.com>

SELECT (count(?mid) as ?distance) WHERE {
  <http://example.com/StopD> ex:via* ?mid .
  ?mid ex:via+ <http://example.com/StopC> .
}
前缀rdf:
前缀rdfs:
前缀ex:
选择(计数(?中间)为?距离),其中{
例:via*?中。
?mid ex:通过+。
}

我想,我的查询不起作用,因为我使用的是空白节点?不起作用意味着,我没有得到两个停止点之间的图的数量(比如StopA和StopB)。我脑子里有这样的想法:

那是我地图的草图。线路旁边的数字表示两个车站之间的行驶时间:

我的RDF代码描述了每个站点及其相邻站点的可用线路和行程持续时间。乍一看,它看起来相当多余,但我想在将来包括单向路线(例如公交车),所以我认为第一次尝试就可以了

RDF(在此处下载文件:)


2.
7.
2.
6.
1.
3.
2.
7.
10
2.
10
6.
2.
2.
1.
3.
2.
2.
为什么你的不起作用 让我们用更易于阅读的Turtle语法(如下)查看您的数据。StopD使用ex:via属性连接到三个空白节点。这意味着您将通过
StopD ex:via*?mid
获得四个匹配项。但是,您没有得到更多的信息,因为没有空白节点与属性EX:VIAS的输出链接。这意味着没有匹配的
?mid ex:via+StopC
,因为?mid没有任何传出的ex:via链接。类似于<代码>中间的EX:STECT/EX:VI+STOC会更好,因为EX:STOP链接使您从空白节点到另一个停止。

@前缀ex:。
@前缀rdf:。
ex:StopD ex:via[ex:Duration“6”;
ex:Line ex:Line2;
例如:停止
] ;
ex:via[ex:Duration“2”;
ex:Line ex:Line4;
例如:停止
] ;
ex:via[ex:Duration“2”;
ex:Line ex:Line3;
停止,停止
] .
即使您可以将addition ex:Stop添加到属性路径,但这仍然不会以您希望的方式计算距离,因为您不会仅限于一行。也就是说,您将在多条路径上获得边

使这项工作成功 我重新创建了一个更简单的场景:

@前缀:。
#B
#            * *
#        2  *   * 4
#          *     *
#         *       *
#A+C+C
#             3
#
#***第1行
#+++第2行
停止,停止链接:Link1,:Link3。
停止,停止链接:Link2。
停下来。
:Link1:has2;
:toStop:StopB;
:line1自身:Link1。
:Link2:has4;
:toStop:StopC;
:line1自身:链接2。
:Link3:has3;
:toStop:StopC;
:Line2Self:Link3。
每个站点都可以通过:toStop连接到任意数量的链接。每条链路的线路都用线的a表示。例如,
link2 line1self link2
表示link2在line1上。这意味着我们使用属性路径“保持在正确的线上”。然后,要查找第1行上从stopA到stopB的行程持续时间,可以使用如下查询:

前缀:
选择(总和(?持续时间)作为长度),其中{
:StopA:toLink/(:toStop/:toLink)*/:Line1Self?链接。
?链接:hasDuration?duration;
:toStop/(:toLink/:Line1Self/:toStop)*:StopC。
}
----------
|长度|
==========
| 6      |
----------
要检查其他行,只需更改:LineXSelf属性。例如,对于线路2:

前缀:
选择(总和(?持续时间)作为长度),其中{
:StopA:toLink/(:toStop/:toLink)*/:Line2Self?链接。
?链接:hasDuration?duration;
:toStop/(:toLink/:Line2Self/:toStop)*:StopC。
}
----------
|长度|
==========
| 3      |
----------
局限性 不过,这种方法有一些局限性。属性路径是执行此类任意深度查询的唯一选项,但不能在属性路径中使用变量,
<?xml version="1.0"?>
<rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:ex="http://example.com/">

    <rdf:Description rdf:about="http://example.com/StopA">

        <ex:via rdf:parseType="Resource">
            <ex:Stop rdf:resource="http://example.com/StopB" />
            <ex:Line rdf:resource="http://example.com/Line1" />     
            <ex:Duration>2</ex:Duration>            
        </ex:via>

        <ex:via rdf:parseType="Resource">
            <ex:Stop rdf:resource="http://example.com/StopB" />
            <ex:Line rdf:resource="http://example.com/Line2" />     
            <ex:Duration>7</ex:Duration>            
        </ex:via>       

        <ex:via rdf:parseType="Resource">
            <ex:Stop rdf:resource="http://example.com/StopD" />
            <ex:Line rdf:resource="http://example.com/Line4" />     
            <ex:Duration>2</ex:Duration>            
        </ex:via>               

        <ex:via rdf:parseType="Resource">
            <ex:Stop rdf:resource="http://example.com/StopD" />
            <ex:Line rdf:resource="http://example.com/Line2" />     
            <ex:Duration>6</ex:Duration>            
        </ex:via>                       

        <ex:via rdf:parseType="Resource">
            <ex:Stop rdf:resource="http://example.com/StopE" />
            <ex:Line rdf:resource="http://example.com/Line1" />     
            <ex:Duration>1</ex:Duration>            
        </ex:via>                               

        <ex:via rdf:parseType="Resource">
            <ex:Stop rdf:resource="http://example.com/StopF" />
            <ex:Line rdf:resource="http://example.com/Line4" />     
            <ex:Duration>3</ex:Duration>            
        </ex:via>                                       

    </rdf:Description>

    <rdf:Description rdf:about="http://example.com/StopB">

        <ex:via rdf:parseType="Resource">
            <ex:Stop rdf:resource="http://example.com/StopA" />
            <ex:Line rdf:resource="http://example.com/Line1" />     
            <ex:Duration>2</ex:Duration>            
        </ex:via>

        <ex:via rdf:parseType="Resource">
            <ex:Stop rdf:resource="http://example.com/StopA" />
            <ex:Line rdf:resource="http://example.com/Line2" />     
            <ex:Duration>7</ex:Duration>            
        </ex:via>       

        <ex:via rdf:parseType="Resource">
            <ex:Stop rdf:resource="http://example.com/StopC" />
            <ex:Line rdf:resource="http://example.com/Line2" />     
            <ex:Duration>10</ex:Duration>           
        </ex:via>               

        <ex:via rdf:parseType="Resource">
            <ex:Stop rdf:resource="http://example.com/StopF" />
            <ex:Line rdf:resource="http://example.com/Line3" />     
            <ex:Duration>2</ex:Duration>            
        </ex:via>                       

    </rdf:Description>      

    <rdf:Description rdf:about="http://example.com/StopC">

        <ex:via rdf:parseType="Resource">
            <ex:Stop rdf:resource="http://example.com/StopB" />
            <ex:Line rdf:resource="http://example.com/Line2" />     
            <ex:Duration>10</ex:Duration>           
        </ex:via>

    </rdf:Description>  

    <rdf:Description rdf:about="http://example.com/StopD">

        <ex:via rdf:parseType="Resource">
            <ex:Stop rdf:resource="http://example.com/StopA" />
            <ex:Line rdf:resource="http://example.com/Line2" />     
            <ex:Duration>6</ex:Duration>            
        </ex:via>

        <ex:via rdf:parseType="Resource">
            <ex:Stop rdf:resource="http://example.com/StopA" />
            <ex:Line rdf:resource="http://example.com/Line4" />     
            <ex:Duration>2</ex:Duration>            
        </ex:via>       

        <ex:via rdf:parseType="Resource">
            <ex:Stop rdf:resource="http://example.com/StopF" />
            <ex:Line rdf:resource="http://example.com/Line3" />     
            <ex:Duration>2</ex:Duration>            
        </ex:via>               

    </rdf:Description>      

    <rdf:Description rdf:about="http://example.com/StopE">

        <ex:via rdf:parseType="Resource">
            <ex:Stop rdf:resource="http://example.com/StopA" />
            <ex:Line rdf:resource="http://example.com/Line1" />     
            <ex:Duration>1</ex:Duration>            
        </ex:via>

    </rdf:Description>  

    <rdf:Description rdf:about="http://example.com/StopF">

        <ex:via rdf:parseType="Resource">
            <ex:Stop rdf:resource="http://example.com/StopA" />
            <ex:Line rdf:resource="http://example.com/Line4" />     
            <ex:Duration>3</ex:Duration>            
        </ex:via>

        <ex:via rdf:parseType="Resource">
            <ex:Stop rdf:resource="http://example.com/StopB" />
            <ex:Line rdf:resource="http://example.com/Line3" />     
            <ex:Duration>2</ex:Duration>            
        </ex:via>

        <ex:via rdf:parseType="Resource">
            <ex:Stop rdf:resource="http://example.com/StopD" />
            <ex:Line rdf:resource="http://example.com/Line3" />     
            <ex:Duration>2</ex:Duration>            
        </ex:via>               

    </rdf:Description>      

</rdf:RDF>