我必须使用这个 Spaql 查询来检索有关一个人的信息,我的问题是将可选构造分解为多个可选构造。
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT DISTINCT ?label ?abstract ?placeOfBirth
?birthPlace ?birthDate ?page ?thumbnail
WHERE {
<http://dbpedia.org/resource/Ismail_Kadare> rdfs:label ?label ;
dbo:abstract ?abstract ;
foaf:page ?page .
OPTIONAL {
<http://dbpedia.org/resource/Ismail_Kadare> dbpprop:placeOfBirth ?placeOfBirth ;
dbpprop:birthPlace ?birthPlace ;
dbo:birthDate ?birthDate ;
dbo:thumbnail ?thumbnail .
}
FILTER (LANG(?label) = 'en')
FILTER (LANG(?abstract) = 'en')
}
LIMIT 1
Run Code Online (Sandbox Code Playgroud)
图案
\n\n<http://dbpedia.org/resource/Ismail_Kadare> dbpprop:placeOfBirth ?placeOfBirth ;\n dbpprop:birthPlace ?birthPlace ;\n dbo:birthDate ?birthDate ;\n dbo:thumbnail ?thumbnail .\nRun Code Online (Sandbox Code Playgroud)\n\n是四个三重模式的简写:
\n\n<http://dbpedia.org/resource/Ismail_Kadare> dbpprop:placeOfBirth ?placeOfBirth .\n<http://dbpedia.org/resource/Ismail_Kadare> dbpprop:birthPlace ?birthPlace .\n<http://dbpedia.org/resource/Ismail_Kadare> dbo:birthDate ?birthDate .\n<http://dbpedia.org/resource/Ismail_Kadare> dbo:thumbnail ?thumbnail .\nRun Code Online (Sandbox Code Playgroud)\n\nOPTIONAL { \xe2\x80\xa6first pattern\xe2\x80\xa6 }您只需使用四个可选块,而不是,每个块对应四个三重模式中的每一个:
optional { <http://dbpedia.org/resource/Ismail_Kadare> dbpprop:placeOfBirth ?placeOfBirth }\noptional { <http://dbpedia.org/resource/Ismail_Kadare> dbpprop:birthPlace ?birthPlace }\noptional { <http://dbpedia.org/resource/Ismail_Kadare> dbo:birthDate ?birthDate }\noptional { <http://dbpedia.org/resource/Ismail_Kadare> dbo:thumbnail ?thumbnail }\nRun Code Online (Sandbox Code Playgroud)\n\n值得一提的是,语言匹配比字符串匹配稍微复杂一点,所以而不是
\n\nFILTER (LANG(?label) = \'en\') \nFILTER (LANG(?abstract) = \'en\')\nRun Code Online (Sandbox Code Playgroud)\n\n你真的应该使用
\n\nfilter(langMatches(lang(?label),\'en\'))\nfilter(langMatches(lang(?abstract),\'en\'))\nRun Code Online (Sandbox Code Playgroud)\n\n它允许您检索使用不同语言标签(全是英语)的结果。
\n\nselect distinct两者limit 1都不是必需的请注意,这select distinct可确保结果中没有任何重复的行。但是,这limit 1意味着无论如何您最多只会得到一个结果,因此不会有任何重复项需要删除。
看起来您正在针对 DBpedia 进行查询,因此可能值得使用公共端点定义的相同命名空间前缀,以便您可以更轻松地复制和粘贴查询并进行实验。这样做(并使用 avalues ?x { dbpedia:Ismail_Kadare }来避免一些输入,我们最终得到这个查询:
select ?label ?abstract ?placeOfBirth ?birthPlace ?birthDate ?page ?thumbnail \nwhere { \n values ?x { dbpedia:Ismail_Kadare }\n ?x rdfs:label ?label ;\n dbpedia-owl:abstract ?abstract ;\n foaf:page ?page .\n optional { ?x dbpprop:placeOfBirth ?placeOfBirth }\n optional { ?x dbpprop:birthPlace ?birthPlace }\n optional { ?x dbpedia-owl:birthDate ?birthDate }\n optional { ?x dbpedia-owl:thumbnail ?thumbnail }\n filter langMatches(lang(?label),\'en\')\n filter langMatches(lang(?abstract),\'en\')\n}\nlimit 1\nRun Code Online (Sandbox Code Playgroud)\n\nDBpedia 端点不会为该查询返回任何内容,但这是因为http://dbpedia.org/resource/Ismail_Kadare没有foaf:page属性,而不是因为查询格式错误。我不知道你是否真的在 DBpedia 上运行这个,所以这可能很重要,也可能不重要。
| 归档时间: |
|
| 查看次数: |
1245 次 |
| 最近记录: |