SPARQL查询:如何拥有一个新的;空";每个结果的元素

SPARQL查询:如何拥有一个新的;空";每个结果的元素,sparql,dbpedia,Sparql,Dbpedia,我正在使用dbpediasparql端点创建的.csv文件创建一个项目。 对于普通查询,没有问题,我使用此查询来获得结果: SELECT ?museum, ?artwork, ?abstract, ?thumbnail WHERE { ?museum <http://dbpedia.org/ontology/address> ?address. ?artwork <http://dbpedia.org/ontology/location> ?museum. ?ar

我正在使用dbpediasparql端点创建的.csv文件创建一个项目。 对于普通查询,没有问题,我使用此查询来获得结果:

    SELECT ?museum, ?artwork, ?abstract, ?thumbnail WHERE {
?museum <http://dbpedia.org/ontology/address> ?address.
?artwork <http://dbpedia.org/ontology/location> ?museum.
?artwork <http://dbpedia.org/ontology/abstract> ?abstract.
?artwork <http://dbpedia.org/ontology/thumbnail> ?thumbnail.
 FILTER contains(?address, "Roma")
}
选择博物馆、艺术品、摘要、缩略图{
博物馆地址。
艺术品博物馆。
?艺术品?摘要。
?艺术品?缩略图。
过滤器包含(?地址,“罗马”)
}
它会生成一个表(博物馆-艺术品-摘要.拇指链接)

我想知道是否有可能在同一个表中添加如下元素

表(博物馆-艺术品-摘要-拇指链接-个人元素代码)

如果它们为空,则所有新元素都是好的

提前谢谢

更新

我用这种“类型”的查询提出了一个要点

选择?博物馆?艺术品?摘要('null'作为?信标代码),其中{
博物馆地址。
艺术品博物馆。
?艺术品?摘要。
过滤器包含(?地址,“Firenze”)
}
注意:不标记:“严格检查无效变量”
这有点野蛮,但它可以正常工作

如前所述,您的查询实际上并不合法。投影变量之间不应该有逗号。DBpedia的端点Virtuoso因允许一些非标准语法而臭名昭著。这尤其令人沮丧,因为如果客户端必须首先解析查询,那么直接在dbpediawebservice中尝试的东西可能无法与客户端库一起工作。您可以在上查看查询

在SPARQL中,您可以选择查询中没有出现的变量,它们应该有一种空值。也就是说,您应该能够:

选择?博物馆?艺术品?摘要?缩略图?个人元素\u代码在哪里{
但是,这在DBpedia端点上实际上不起作用(同样,这是一个古怪的技巧)

选择人员?x位置{
?个人a数据库猫头鹰:个人
}
限制10
Virtuoso 37000错误SP031:SPARQL编译器:在查询结果集中使用了变量“x”,但未赋值

但是,您可以轻松解决此问题。只需在查询体中使用值?x{unde}。例如:

选择人员?x位置{
值?x{unde}
?个人a数据库猫头鹰:个人
}
限制10

如果您为此请求CSV,您将返回以下内容,其中包含您要查找的空列:

“个人”、“x”
"http://dbpedia.org/resource/%C3%81ngel_Gim%C3%A9nez",
"http://dbpedia.org/resource/Aaron_Lines",
"http://dbpedia.org/resource/Abel_Lafleur",
"http://dbpedia.org/resource/Ada_Maimon",
"http://dbpedia.org/resource/Adam_Krikorian",
"http://dbpedia.org/resource/Albert_Constable",
"http://dbpedia.org/resource/Alex_Reid_(女演员)",,
"http://dbpedia.org/resource/Alex_Reid_(艺术品交易商)“,
"http://dbpedia.org/resource/Alex_Reid_(战斗机)“,
"http://dbpedia.org/resource/Alex_Reid_(足球运动员)“,
如果您实际上只想让字符串为null,这就容易多了。您可以只('null'作为?x)。例如:

选择人员('null'作为?x),其中{
值?x{unde}
?个人a数据库猫头鹰:个人
}
限制10

“个人”、“x”
"http://dbpedia.org/resource/%C3%81ngel_Gim%C3%A9nez,“空”
"http://dbpedia.org/resource/Aaron_Lines,“空”
"http://dbpedia.org/resource/Abel_Lafleur,“空”
"http://dbpedia.org/resource/Ada_Maimon,“空”
"http://dbpedia.org/resource/Adam_Krikorian,“空”
"http://dbpedia.org/resource/Albert_Constable,“空”
"http://dbpedia.org/resource/Alex_Reid_(女演员)“,“无效”
"http://dbpedia.org/resource/Alex_Reid_(艺术品经销商)“,“无效”
"http://dbpedia.org/resource/Alex_Reid_(战斗机)“,“空”
"http://dbpedia.org/resource/Alex_Reid_(足球运动员)“,”无效“

处理可能存在或不存在的数据项的方法是使用可选项

e、 g

选择?博物馆?艺术品?摘要?缩略图在哪里{
博物馆地址。
艺术品博物馆。
过滤器包含(?地址,“罗马”)
可选{?艺术品?摘要。}
可选{?艺术品?缩略图。}
}

我得到的印象是OP并不是在寻找可选值,而是在结果集中引入一个空列的方法,这样CSV就有一个“空列”(大概是为了匹配一些需要一定数量列的处理)。
SELECT ?museum ?artwork ?abstract ('null' as ?beacon_code) WHERE {

?museum <http://dbpedia.org/ontology/address> ?address.
?artwork <http://dbpedia.org/ontology/location> ?museum.
?artwork <http://dbpedia.org/ontology/abstract> ?abstract.

 FILTER contains(?address, "Firenze")
}
SELECT ?museum ?artwork ?abstract ?thumbnail WHERE {
    ?museum <http://dbpedia.org/ontology/address> ?address.
    ?artwork <http://dbpedia.org/ontology/location> ?museum.
    FILTER contains(?address, "Roma")
    OPTIONAL{?artwork <http://dbpedia.org/ontology/abstract> ?abstract.}
    OPTIONAL{?artwork <http://dbpedia.org/ontology/thumbnail> ?thumbnail.}
    }