执行查询时给出错误,在'_New_South_Wales'之前的','处出现语法错误。
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX grs: <http://www.georss.org/georss/>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
SELECT ?label ?country ?isPartOf ?_type ?capital ?lcity ?geopoint
WHERE {
{ dbr:Eraring,_New_South_Wales rdfs:label ?label . FILTER(LANGMATCHES(LANG(?label), "en"))}
UNION{OPTIONAL{dbr:Eraring,_New_South_Wales dbo:country ?country} }
UNION{OPTIONAL{dbr:Eraring,_New_South_Wales dbo:isPartOf ?isPartOf}}
UNION{OPTIONAL{dbr:Eraring,_New_South_Wales <http://purl.org/linguistics/gold/hypernym> ?_type}}
UNION{OPTIONAL{dbr:Eraring,_New_South_Wales dbo:capital ?capital}}
UNION{OPTIONAL{dbr:Eraring,_New_South_Wales dbo:largestCity ?lcity}}
UNION{OPTIONAL{dbr:Eraring,_New_South_Wales grs:point ?geopoint}}
}
完整的错误报告如下。
Virtuoso 37000错误SP030:SPARQL编译器,第21行:在'_'语法错误,在'_New_South_Wales'SPARQL查询之前:#output-format:application / sparql-results + json定义输入:default-graph-uri PREFIX猫头鹰: PREFIX xsd:PREFIX rdfs:PREFIX rdf:PREFIX foaf:PREFIX dc:PREFIX:PREFIX dbpedia2:PREFIX dbpedia:PREFIX skos:PREFIX dbo:PREFIX dbp:PREFIX dbr:PREFIX grs:PREFIX geo:SELECT?label?country?isPartOf?type ?资本?地理位置?地点在{{dbr:Eraring,_New_South_Wales rdfs:label?label。 FILTER(LANGMATCHES(LANG(?label),“ en”))} UNION {可选{dbr:Eraring,_New_South_Wales dbo:country?country}} UNION {可选{dbr:Eraring,_New_South_Wales dbo:isPartOf?isPartOf}} UNION { {OPTIONAL {dbr:Eraring,_New_South_Wales?_type}} UNION {OPTIONAL {dbr:Eraring,_New_South_Wales dbo:capital?capital}} UNION {OPTIONAL {dbr:Eraring,_New_South_Wales dbo:largestCity?lcityAL} {UNAL} ,_New_South_Wales grs:point?geopoint}}}
这是您可以自行测试此查询的链接。 snorql
答案 0 :(得分:1)
您正在尝试在查询中使用前缀名称,并且错误消息指示
dbr:Eraring,_New_South_Wales
作为错误的来源,特别是逗号使解析器失败。
因此,让我们看一下W3C建议:
4.1.1.1前缀名称
PREFIX关键字将前缀标签与IRI关联。带前缀 name是前缀标签和局部部分,以冒号“:”分隔。一种 通过连接关联的IRI,将前缀名称映射到IRI 加上前缀和本地部分。前缀标签或本地部分 可能是空的。请注意,SPARQL本地名称允许前导数字,而 XML本地名称没有。 SPARQL本地名称还允许 通过反斜杠字符在IRI中允许使用非字母数字字符 转义(例如ns:id \ = 123)。 SPARQL本地名称具有更多语法 限制超过CURIE。
鉴于该错误发生在本地名称中,并且逗号是一个非字母数字字符,此处最重要的部分是
SPARQL本地名称还允许使用非字母数字字符 在IRI中通过反斜杠字符转义(例如ns:id \ = 123)
。
这意味着,我们可以使用逗号,但必须通过\
将其转义,即我们必须编写
dbr:Eraring\,_New_South_Wales
不幸的是,考虑到
这样的查询,Virtuoso解析器似乎有一些问题(或者我在这里做错了)SELECT * { dbr:Eraring\,_New_South_Wales ?p ?o }
失败
Virtuoso 37000 Error SP030: SPARQL compiler, line 0: Bad character '\' (0x5c) in SPARQL expression at '\'
一个始终有效的选择确实是只使用完整的IRI。
在DBpedia端点上运行的查询是
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX grs: <http://www.georss.org/georss/>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
SELECT ?label ?country ?isPartOf ?_type ?capital ?lcity ?geopoint WHERE {
VALUES ?s {<http://dbpedia.org/resource/Eraring,_New_South_Wales>}
?s rdfs:label ?label .
FILTER(LANGMATCHES(LANG(?label), "en"))
OPTIONAL{?s dbo:country ?country}
OPTIONAL{?s dbo:isPartOf ?isPartOf}
OPTIONAL{?s <http://purl.org/linguistics/gold/hypernym> ?_type}
OPTIONAL{?s dbo:capital ?capital}
OPTIONAL{?s dbo:largestCity ?lcity}
OPTIONAL{?s grs:point ?geopoint}
}
您可以看到我对查询做了一些修改:
UNION
子句–您只需要获取
可选数据(如果存在),因此OPTIONAL
是正确的SPARQL功能VALUES
关键字用于内联数据