DBPedia:SPARQL查询以literal开头的字段

DBPedia:SPARQL查询以literal开头的字段,sparql,dbpedia,Sparql,Dbpedia,我正在尝试获取公司列表的相应DBPedia条目。我不知道如何进行近似匹配。 例如:“奥迪”在DBPedia中被称为“奥迪股份公司”,“诺华”被称为“诺华国际股份公司”(foaf:name)。如何搜索rdf:type=dbo:Company和名称与我提供的内容最接近的条目 我使用SPARQL作为查询语言。(但如果有优势,我愿意改变。) 我没有被击中,但应该被找到。匹配名称的开头可能就足够了。对于DBpedia,最好的选择可能是使用bif:contains全文搜索伪属性: SELECT ?compa

我正在尝试获取公司列表的相应DBPedia条目。我不知道如何进行近似匹配。 例如:“奥迪”在DBPedia中被称为“奥迪股份公司”,“诺华”被称为“诺华国际股份公司”(foaf:name)。如何搜索rdf:type=dbo:Company和名称与我提供的内容最接近的条目

我使用SPARQL作为查询语言。(但如果有优势,我愿意改变。)


我没有被击中,但应该被找到。匹配名称的开头可能就足够了。

对于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"))
}

这将在名称中的任何位置找到不区分大小写的匹配项。

SPARQL是,with,DBpedia托管在引擎上,with。。。更不用说可以帮助您基于自己的查询构建更多查询的内置工具了。为什么您认为
http://dbpedia.org/resource/Novartis
是否应与您的查询一起找到?该资源的
foaf:name
“诺华国际股份有限公司”@en
,只有其
rdfs:label
“诺华”@en
——任何超出RDF三元组中现有文本精确匹配范围的问题都只能通过一些
过滤器
和其中一个字符串函数来解决(<代码> ReXEX <代码>,<代码>包含<代码> >代码> StrutS/<代码>)或一些不属于SPARQL 1.1标准但三重存储相关的扩展函数。在DbPEDAI上进行更精确的匹配是考虑重定向,也称为表面形式或资源的同义词:<代码>?“诺华”@en.谢谢@cygri!我使用“bif:contains”进行了第一次尝试,效果非常好!
SELECT ?company {
  ?company a dbo:Company.
  ?company foaf:name ?name.
  FILTER contains(lCase(?name), lCase("Novartis"))
}