显示哪个结果由ASK查询中的哪个绑定组合确定

时间:2018-01-20 09:06:27

标签: sparql

有没有办法显示ASK查询的哪个bindig用于哪个结果?

澄清我的意思:对于一个非常简单的SELECT查询:

SELECT DISTINCT * WHERE {
 ?class_0 ?property_0 ?uri . 
 VALUES (?class_0) {(<http://dbpedia.org/resource/Angela_Merkel>) } 
 VALUES (?property_0) {(<http://dbpedia.org/ontology/birthPlace>) (<http://dbpedia.org/ontology/birthDate>) }
} 

会给出这个:

╔════════════════════════════════════════════╦═════════════════════════════════════════╦══════════════════════════════════════════════════════╗
║                  class_0                   ║               property_0                ║                         uri                          ║
╠════════════════════════════════════════════╬═════════════════════════════════════════╬══════════════════════════════════════════════════════╣
║ http://dbpedia.org/resource/Angela_Merkel  ║ http://dbpedia.org/ontology/birthPlace  ║ http://dbpedia.org/resource/Hamburg                  ║
║ http://dbpedia.org/resource/Angela_Merkel  ║ http://dbpedia.org/ontology/birthPlace  ║ http://dbpedia.org/resource/Barmbek-Nord             ║
║ http://dbpedia.org/resource/Angela_Merkel  ║ http://dbpedia.org/ontology/birthDate   ║ 1954-07-17                                           ║
║ http://dbpedia.org/resource/Angela_Merkel  ║ http://dbpedia.org/ontology/birthDate   ║ "1954-7-17"^^<http://www.w3.org/2001/XMLSchema#date> ║
╚════════════════════════════════════════════╩═════════════════════════════════════════╩══════════════════════════════════════════════════════╝

所以我确切知道如何确定结果:

http://dbpedia.org/resource/Angela_Merkel + http://dbpedia.org/ontology/birthPlace -> http://dbpedia.org/resource/Hamburg, http://dbpedia.org/resource/Barmbek-Nord

有没有办法获取以下查询的此信息?

PREFIX dbr: <http://dbpedia.org/resource/> 
PREFIX dbo: <http://dbpedia.org/ontology/> 
ASK WHERE { 
 ?class_0 a dbo:Sport . 
 VALUES (?class_0) {(dbr:Horse_racing) (dbr:Angela_Merkel)}
}

所以我可以看到

dbo:Sport + dbr:Horse_racing -> true
dbo:Sport + dbr:Angela_Merkel -> false

注意:我知道可以将此查询拆分为两部分,但如果可能,我希望避免这种情况。

1 个答案:

答案 0 :(得分:2)

SPARQL ASK只能返回一个布尔值;因此,您无法使用此查询类型。

此查询可能会执行您想要的操作:

PREFIX dbr: <http://dbpedia.org/resource/> 
PREFIX dbo: <http://dbpedia.org/ontology/> 
SELECT * WHERE { 
 VALUES (?class_0) {(dbr:Horse_racing) (dbr:Angela_Merkel)}
 BIND(xsd:boolean(exists{?class_0 a dbo:Sport}) as ?exists)
}