将数据从DBPedia导入GraphDB

时间:2018-11-02 16:59:49

标签: dbpedia graphdb

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

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

任何对此的建议将不胜感激。感谢您抽出宝贵的时间来帮助您。

1 个答案:

答案 0 :(得分:1)

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规范而臭名昭著。该服务返回的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>
...

克服此问题的唯一方法是添加一个额外的过滤器,以即时对其进行重写。