[英]SPARQL Query for searching all properties of one type to match a string
我正在尝试构建一个SPARQL查询来搜索类型的所有属性。 例如,我想搜索Person类型( http://topbraid.org/examples/kennedys#Person )并返回其属性与输入字符串“ken”匹配的Person实例。 这是我正在使用的当前查询:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ui: <http://uispin.org/ui#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT *
WHERE {
GRAPH <http://topbraid.org/examples/kennedys> {
?subject a <http://topbraid.org/examples/kennedys#Person>;
?property ?value .
FILTER EXISTS {
?subject ?anyProperty ?anyValue .
FILTER (isLiteral(?anyValue) && regex(xsd:string(?anyValue), "1956", "i")) .
} .
}
}
以上查询返回给我:
这在匹配属性birthYear并返回3个实例时是正确的。 但是当我搜索“男性”,并希望返回与男性匹配的所有Person实例时,我没有达到我的预期。
询问
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ui: <http://uispin.org/ui#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT *
WHERE {
GRAPH <http://topbraid.org/examples/kennedys> {
?subject a <http://topbraid.org/examples/kennedys#Person>;
?property ?value .
FILTER EXISTS {
?subject ?anyProperty ?anyValue .
FILTER (isLiteral(?anyValue) && regex(xsd:string(?anyValue), "male", "i")) .
} .
}
}
我的查询有问题吗?
你没有做错任何事。 第二个结果令人惊讶的是什么? 你正在做一个不区分大小写的正则表达式匹配,并且有三重奏
:SydneyLawford :middleName "Maleia"
"Maleia"
肯定与"male"
相匹配(因为比赛不区分大小写)。 如果您希望该值具有完全字符串"male"
,请尝试稍微不同的filter
:
FILTER (isLiteral(?anyValue) && lcase(str(?anyValue)) = "male")
所以这是最后的查询。 我把它分成两部分。 第一个将搜索Person类型的所有属性值。 第二部分获取值中对象的rdfs:标签。 所以这个例子就是财产价值http://topbraid.org/examples/kennedys#female会有一个标签为女性。 该查询将与该匹配。 这两个结果将在最后结合。
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ui: <http://uispin.org/ui#>
SELECT distinct ?subject
WHERE {
{
GRAPH <http://topbraid.org/examples/kennedys> {
?subject a <http://topbraid.org/examples/kennedys#Person> .
?subject ?property ?value .
FILTER (isLiteral(?value) && regex(str(?value), "1956", "i")) .
}
}
UNION
{
GRAPH <http://topbraid.org/examples/kennedys> {
?subject a <http://topbraid.org/examples/kennedys#Person> .
?subject ?property ?value .
?property rdfs:label ?propertyName .
?value rdfs:label ?valueName .
FILTER regex(?valueName, "female") .
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.