从 DBPedia 导入数据到 GraphDB

Import data from DBPedia into GraphDB

我基本上希望使用 SPARQL 构造查询将数据从 DBPEdia 检索到本地版本的 GraphDB。构造查询应该能够映射到与音乐相关的尽可能多的关系和数据。我已经尝试 运行 在 GraphDB Workbench 中构建查询,但我不确定如何去做。

在GraphDB的在线教程中,他们总是使用文件或在线资源导入数据,我找不到任何使用构造查询直接在数据库中获取数据的示例。

如有任何相关建议,我们将不胜感激。感谢您花时间提供帮助。

GraphDB支持导入已转换为RDF数据格式的数据。从 DBPedia 等外部端点导入数据的最简单方法是使用 SPARQL 联合。这是一个示例查询,它从远程端点获取数据并将其导入当前选择的 GraphDB 存储库:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
INSERT {
    ?s ?p ?o2
}
WHERE {
    # Execute the query against DBPedia's endpoint
    SERVICE <http://dbpedia.org/sparql> {
        SELECT ?s ?p ?o2
        {
            # Select all triples for Madonna
            ?s ?p ?o
            FILTER (?s =  <http://dbpedia.org/resource/Madonna_(entertainer)>)


            # Hacky function to rewrite all Literals of type rdf:langStrings without a language tag
            BIND (
                IF ( 
                    (isLiteral(?o) && datatype(?o) = rdf:langString && lang(?o) = ""), 
                    (STRDT(STR(?o), xsd:string)),
                    ?o
                )
                AS ?o2
            )
        }
    }
}

不幸的是,DBPedia 和底层数据库引擎因不严格遵守 SPARQL 1.1 和 RDF 1.1 规范而臭名昭著。 returns 类型 rdf:langString 的 RDF 文字服务没有适当的语言标签:

...
  <result>
   <binding name="s"><uri>http://dbpedia.org/resource/Madonna_(entertainer)</uri></binding>
   <binding name="p"><uri>http://dbpedia.org/property/d</uri></binding>
   <binding name="o"><literal datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString">Q1744</literal></binding>
  </result>
...

克服这个问题的唯一方法是添加一个额外的过滤器,动态重写它们。