【问题标题】:Columns and rows in SPARQL query resultSPARQL 查询结果中的列和行
【发布时间】:2012-03-20 18:58:11
【问题描述】:

我这里有个问题,看起来很简单,但是因为我对 Sparal 查询不是很熟悉,所以我找不到解决方案。

PREFIX onto: <http://dbpedia.org/ontology/>
PREFIX resu: <http://dbpedia.org/resource/>
PREFIX yago: <http://dbpedia.org/class/yago/>

SELECT 

count(?MontrealC) as ?Montrea
count(?TorontoC) as ?Toronto
count(?OttawaC) as ?Ottawa
count(?VancouverC) as ?Vancouver


WHERE
{
{?MontrealC rdf:type yago:HotelsInMontreal} UNION
{?TorontoC rdf:type yago:HotelsInToronto} UNION
{?OttawaC rdf:type yago:HotelsInOttawa} UNION
{?VancouverC a onto:Hotel .
{?VancouverC onto:location resu:Vancouver} UNION
{?VancouverC onto:location ?street .
?street a yago:StreetsInVancouver}} UNION
{?VancouverC a yago:HotelsInBritishColumbia .
{?VancouverC onto:location resu:Vancouver} UNION
{?VancouverC onto:location ?street.
?street a yago:StreetsInVancouver}
}}

在任何 dbpedia 端点中应用此查询后,您将获得显示在两行和四列中的结果,如下所示:

Montreal    Toronto     Ottawa    Vancouver
8           28          5         10

问题是我需要它们在两列和四行中,如下所示:

Montreal    Toronto
8           28 
Ottawa    Vancouver
5         10

这在 SPARQL 查询中是否可行?

【问题讨论】:

  • 您说要四行,但您在此处发布的内容只有一行。
  • 抱歉,可能有问题。我得到了一个答案,在其他地方说这在 SPARQL 中不可能发生。
  • 您想通过所有这些工会实现什么目标?你能解释一下你的查询要求什么吗?几乎可以肯定有一种更简洁的编写方式……此外,虽然 Virtuoso(DBpedia 使用的 SPARQL 端点)可以接受这个查询,但它不是合法的 SPARQL。通过 sparql.org 上的验证器运行查询是值得的。

标签: rdf sparql semantic-web dbpedia linked-data


【解决方案1】:

这对于一个 SPARQL 查询是不可能的。但是,这应该不是什么大问题,因为您已经获得了正确的数据,并且您只想对其进行不同的表示。您能否提供更多背景信息,说明您为什么需要以这种方式获取数据、您询问了多少查询以及您是手动执行还是嵌入到某个程序中(如果是,您使用哪种编程语言)?

如果您真的想要这样,请将其拆分为两个查询并附加结果:

查询 1

PREFIX onto: <http://dbpedia.org/ontology/>
PREFIX resu: <http://dbpedia.org/resource/>
PREFIX yago: <http://dbpedia.org/class/yago/>

SELECT 

count(?MontrealC) as ?Montreal
count(?TorontoC) as ?Toronto

WHERE
{
{?MontrealC rdf:type yago:HotelsInMontreal} UNION
{?TorontoC rdf:type yago:HotelsInToronto}
}

查询 2

PREFIX onto: <http://dbpedia.org/ontology/>
PREFIX resu: <http://dbpedia.org/resource/>
PREFIX yago: <http://dbpedia.org/class/yago/>

SELECT 

count(?OttawaC) as ?Ottawa
count(?VancouverC) as ?Vancouver

WHERE
{
{?OttawaC rdf:type yago:HotelsInOttawa} UNION
{?VancouverC a onto:Hotel .
{?VancouverC onto:location resu:Vancouver} UNION
{?VancouverC onto:location ?street .
?street a yago:StreetsInVancouver}} UNION
{?VancouverC a yago:HotelsInBritishColumbia .
{?VancouverC onto:location resu:Vancouver} UNION
{?VancouverC onto:location ?street.
?street a yago:StreetsInVancouver}
}}

合并

  • 将结果另存为 query1.csv 和 query2.csv
  • 在终端中,输入“cat query1.csv query2.csv > query.csv”

    $ cat query1.csv query2.csv
    "Montrea","Toronto"
    8,28
    "Ottawa","Vancouver"
    5,10
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    相关资源
    最近更新 更多