我写了以下查询:
SELECT DISTINCT
?predicate
?object
?label
WHERE {
VALUES ?subject { <http://dbpedia.org/resource/Hercules_(1997_film)> }
?subject ?predicate ?object .
?predicate rdfs:label ?label .
FILTER(langMatches(lang(?object), "EN"))
}
LIMIT 100
当我写下FILTER
这样,我基本上过滤掉了所有非文字(附带问题:文字是唯一可以具有语言标签的类型吗?)
那么,我如何保留所有结果并过滤掉非英语文字 only?
你可以使用isLiteral功能 http://www.w3.org/TR/sparql11-query/#func-isLiteral仅将语言限制应用于文字对象。
x 隐含 y可以用 SPARQL 运算符表示为!x || y,因此您可以像这样编写查询:
SELECT DISTINCT
?predicate
?object
?label
WHERE {
VALUES ?subject { <http://dbpedia.org/resource/Hercules_(1997_film)> }
?subject ?predicate ?object .
?predicate rdfs:label ?label .
FILTER(!isLiteral(?object) || langMatches(lang(?object), "EN"))
}
LIMIT 100
至于你的第二个问题,RDF 概念和摘要中语言标签的描述 http://www.w3.org/TR/2004/REC-rdf-concepts-20040210/#dfn-language-identifier仅提及作为一部分出现的语言标签纯文字。同样,SPARQL 1.1 规范中的语法 http://www.w3.org/TR/sparql11-query/#sparqlGrammar使用LANGTAG非终结符 http://www.w3.org/TR/sparql11-query/#rLANGTAG仅在RDFLiteral生产 http://www.w3.org/TR/sparql11-query/#rRDFLiteral作为替代数据类型 IRI 的唯一替代方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)