sparql - 如何按名称一致地查询 dbpedia 中的编程语言?

标签 sparql dbpedia

似乎没有一致的方法可以根据名称查询编程语言。示例:

http://dbpedia.org/page/D_(programming_language)
rdfs:label "D (programming language)"@en
dbpprop:name "D programming language"
owl:sameAs freebase:"D (programming language)"
foaf:name "D programming language"

对比

http://dbpedia.org/page/C++
rdfs:label "C++"@en
dbpprop:name "C++"
owl:samwAs freebase:"C++"
foaf:name "C++"

由于对于“编程语言”、“(编程语言)”、“programming_language”、“(programming_language”)或“”是否是 dbpedia 中编程语言名称的一部分没有标准约定,我不知道如何始终如一地按名称搜索。

我想创建某种返回 http://dbpedia.org/page/D_(programming_language 的 SPARQL 查询) 对于“D”和 http://dbpedia.org/page/C++对于“C++”,但我不知道该怎么做。

除非编程语言的各种三元组中至少有一个使用一致的命名约定,否则我将不得不通过首先查询名称+“(编程语言)”,然后回退到名称+“(编程语言”)来破解它, name + "programming language"当没有找到结果时。但我想要一个更健壮的方法。

最佳答案

您当然可以只使用基本子字符串匹配或正则表达式进行匹配,例如像这样找到“C++”的匹配项:

SELECT DISTINCT ?pl ?label
WHERE { 
    ?pl a dbpedia-owl:ProgrammingLanguage ;
        rdfs:label ?label .
    FILTER(langMatches(lang(?label), "en"))
    FILTER(regex(str(?label), "C\\+\\+")) 
}

当然,上面的代码对于像“D”这样的编程语言名称会有问题,因为您会得到几个匹配项(“D”、“Dylan”、“MAD”等)。在这些情况下,您可能希望对结果进行一些巧妙的后处理,例如标记返回的标签并查看您的输入字符串是否作为独立单词出现。

众所周知,SPARQL 中的正则表达式匹配非常昂贵(就评估时间而言),但由于您将其与特定类别的类型约束相结合,DBPedia 端点应该能够很好地处理此类查询。

关于sparql - 如何按名称一致地查询 dbpedia 中的编程语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13094536/

相关文章:

python - 使用 SPARQL 进行有限的 RDFS 和 OWL 推理

wikipedia - Freebase/DBpedia/wikidata.org -- 差异

prolog - 如何在 SWI Prolog 中参数化 SPARQL 查询?

sparql --通过返回空响应进行排序

sparql - 如何在 Apache Jena Fuseki 服务器中查询命名图

sparql - 在 FILTER 子句中使用 IN 子句,在 SPARQL 查询中

java - 使用 Jena 将子子项添加到 RDF

java - 在java web中使用OWL API获取快照SPARQL查询

sparql - 获取 DBpedia 类的所有属性

python - 使用 rdflib 和 python 测试 dbpedia 页面的资源类型