SPARQL查询dbpedia以查找滑雪升降机

SPARQL查询dbpedia以查找滑雪升降机,sparql,dbpedia,Sparql,Dbpedia,我目前正试图教自己如何制定SPARQL查询,以从DBpedia(via)中提取与旅游相关的信息 到目前为止,我已经设法为一个国家获得了所有的博物馆 select ?thing ?type ?category ?long ?lat ?country where { VALUES ?country { <http://dbpedia.org/resource/Canada> } optional { ?city dbo:

我目前正试图教自己如何制定SPARQL查询,以从DBpedia(via)中提取与旅游相关的信息

到目前为止,我已经设法为一个国家获得了所有的博物馆

select ?thing ?type ?category ?long ?lat ?country 
where
  {      
    VALUES ?country { <http://dbpedia.org/resource/Canada> }

    optional
      { 
        ?city  dbo:country  ?country 
      }

    ?thing  dbo:location  ?city.

    optional
      { 
        ?thing  a  ?type  .
        VALUES ?type { dbo:Museum }
        BIND( 'Museum' as ?category )
      }

    optional
      { 
        ?thing a ?type.
        VALUES ?type { dbo:skiLift }
        BIND( 'Skilift' as ?category )
      }

    optional
      {
        ?thing geo:long ?long.
        ?thing geo:lat ?lat
      }

    {
      ?thing a dbo:Place
    }

    filter (BOUND (?type))
  }
选择物品类型类别长纬度国家
哪里
{      
价值观?国家{}
可选择的
{ 
?城市dbo:国家?国家
}
dbo:地点?城市。
可选择的
{ 
a型的东西。
值?类型{dbo:Museum}
绑定(‘博物馆’作为?类别)
}
可选择的
{ 
a型的东西。
值?类型{dbo:skiLift}
绑定(‘Skilift’作为?类别)
}
可选择的
{
长?长。
地理位置:纬度?纬度
}
{
?dbo的东西:地方
}
过滤器(绑定(?型))
}
然而,我不明白我需要做些什么才能获得类似于
dbo:skiLift
dbo:touristicSite
之类的信息(见此处:)


我做错了什么?

这是因为
dbo:skiLift
dbo:touristicSite
都是属性。这些资源显示在Place页面中,不是作为Place的子类,而是以类Place作为其域或范围的属性。如果要查找位置的子类,可以执行探索性查询(它还使用属性路径检索
子类
属性的可传递闭包):

select?东西
哪里
{
?事物rdfs:子类F+。
} 
除此之外,我无法理解为什么在同一个查询中对不同类型使用两个可选子句。例如,以下查询检索位于加拿大城市的博物馆,可能带有lat和lon,而不使用其他可选条款:

select ?thing ?city ?long ?lat  
where
  {
    ?city   dbo:country   <http://dbpedia.org/resource/Canada> .
    ?thing  dbo:location  ?city .
    ?thing  a             dbo:Museum .

    optional
      {
        ?thing  geo:long  ?long .
        ?thing  geo:lat   ?lat
      }
  }
select?thing?city?long?lat
哪里
{
?城市dbo:国家。
dbo:地点?城市。
dbo:博物馆。
可选择的
{
长?长。
地理位置:纬度?纬度
}
}

这是因为
dbo:skiLift
dbo:touristicSite
都是属性。这些资源显示在Place页面中,不是作为Place的子类,而是以类Place作为其域或范围的属性。如果要查找位置的子类,可以执行探索性查询(它还使用属性路径检索
子类
属性的可传递闭包):

select?东西
哪里
{
?事物rdfs:子类F+。
} 
除此之外,我无法理解为什么在同一个查询中对不同类型使用两个可选子句。例如,以下查询检索位于加拿大城市的博物馆,可能带有lat和lon,而不使用其他可选条款:

select ?thing ?city ?long ?lat  
where
  {
    ?city   dbo:country   <http://dbpedia.org/resource/Canada> .
    ?thing  dbo:location  ?city .
    ?thing  a             dbo:Museum .

    optional
      {
        ?thing  geo:long  ?long .
        ?thing  geo:lat   ?lat
      }
  }
select?thing?city?long?lat
哪里
{
?城市dbo:国家。
dbo:地点?城市。
dbo:博物馆。
可选择的
{
长?长。
地理位置:纬度?纬度
}
}

您没有选择变量
typeName
,因此,它应该是
BIND('Skilift'as?category)
此外,公共DBpedia端点的默认限制为10000行。你不会马上看到整个结果。使用
OFFSET
对itI进行分页我已经将查询从“typeName”更改为“category”,但仍然没有获得滑雪板。您没有选择变量
typeName
,因此,它应该是
BIND('Skilift'as?category)
此外,公共DBpedia端点的默认限制为10000行。你不会马上看到整个结果。使用
OFFSET
对itI进行分页我已将查询从“typeName”更改为“category”,但仍然没有获得滑雪板。谢谢,这很有趣,很高兴知道,但我仍然不明白如何获得dbo:skiLift等属性的信息?确切的信息是什么?您可以看到一些具有特定属性的三元组,例如使用以下查询:
select?subject?object where{subject dbo:skiLift?object.}LIMIT 10
对于特定属性,数据集中似乎没有使用它,因此结果为空。谢谢,这很有趣,很高兴知道,但是我仍然不明白如何获得属性的信息,比如dbo:skiLift?确切的信息是什么?例如,您可以使用诸如
select?subject?object,其中{subject dbo:skiLift?object.}LIMIT 10
之类的查询来查看具有特定属性的一些三元组。对于特定属性,它似乎未在数据集中使用,因此结果为空。