DBPedia:对以文字开头的字段进行 SPARQL 查询
DBPedia: SPARQL query on field starting with literal
我正在尝试获取公司列表的相应 DBPedia 条目。我不知道如何进行近似匹配。
示例:"Audi" 在 DBPedia 中称为 "Audi AG","Novartis" 称为 "Novartis International AG" (foaf:name)。如何搜索 rdf:type = dbo:Company 且名称最接近我提供的条目?
我使用 SPARQL 作为查询语言。 (但如果有优势,我愿意改变。)
select ?company
where {
?company foaf:name "Novartis"@en.
?company a dbo:Company.
}
LIMIT 100
我没有命中,但应该找到 http://dbpedia.org/page/Novartis。匹配名字的开头可能就足够了。
对于 DBpedia,最好的选择可能是使用 bif:contains
全文搜索 伪 属性:
SELECT ?company {
?company a dbo:Company.
?company foaf:name ?name.
?name bif:contains "Novartis"@en.
}
此功能特定于支持 DBpedia SPARQL 端点的 Virtuoso 数据库。
如果你想坚持标准 SPARQL,只匹配名称的开头:
SELECT ?company {
?company a dbo:Company.
?company foaf:name ?name.
FILTER strStarts(?name, "Novartis")
}
与全文功能不同,此版本无法使用文本索引,因此速度较慢。
如果你想要更灵活的搭配:
SELECT ?company {
?company a dbo:Company.
?company foaf:name ?name.
FILTER contains(lCase(?name), lCase("Novartis"))
}
这将在名称中的任意位置找到不区分大小写的匹配项。
我正在尝试获取公司列表的相应 DBPedia 条目。我不知道如何进行近似匹配。 示例:"Audi" 在 DBPedia 中称为 "Audi AG","Novartis" 称为 "Novartis International AG" (foaf:name)。如何搜索 rdf:type = dbo:Company 且名称最接近我提供的条目?
我使用 SPARQL 作为查询语言。 (但如果有优势,我愿意改变。)
select ?company
where {
?company foaf:name "Novartis"@en.
?company a dbo:Company.
}
LIMIT 100
我没有命中,但应该找到 http://dbpedia.org/page/Novartis。匹配名字的开头可能就足够了。
对于 DBpedia,最好的选择可能是使用 bif:contains
全文搜索 伪 属性:
SELECT ?company {
?company a dbo:Company.
?company foaf:name ?name.
?name bif:contains "Novartis"@en.
}
此功能特定于支持 DBpedia SPARQL 端点的 Virtuoso 数据库。
如果你想坚持标准 SPARQL,只匹配名称的开头:
SELECT ?company {
?company a dbo:Company.
?company foaf:name ?name.
FILTER strStarts(?name, "Novartis")
}
与全文功能不同,此版本无法使用文本索引,因此速度较慢。
如果你想要更灵活的搭配:
SELECT ?company {
?company a dbo:Company.
?company foaf:name ?name.
FILTER contains(lCase(?name), lCase("Novartis"))
}
这将在名称中的任意位置找到不区分大小写的匹配项。