【问题标题】:Which .nt file from the DBpedia dataset contains the triples about DBpedia classes?DBpedia 数据集中的哪个 .nt 文件包含关于 DBpedia 类的三元组?
【发布时间】:2013-05-06 08:24:31
【问题描述】:

我正在处理 DBpedia 数据集,并使用 Apache Jena 在本地 Jena TDB 数据集上执行 SPARQL。我只从DBpedia Downloads 下载了一些文件,这样我就可以将数据集的大小保持在最低限度,但是当我执行类似的 SPARQL 查询时没有得到任何结果:

Select distinct * WHERE {
<http://dbpedia.org/ontology/Person> ?x ?y
} LIMIT 5

但是,如果我在 Virtuoso client 上运行相同的查询,我会得到有效的结果。

哪个 .nt 文件包含以下形式的 URI 三元组:

http://dbpedia.org/ontology/Person
http://www.w3.org/1999/02/22-rdf-syntax-ns#type
http://www.w3.org/2002/07/owl#Class

意思是,Downloads 中的哪个 .nt 文件需要添加到我本地的 Jena TDB 数据集中?

附:我的数据集中已经有本体信息框类型,其中包含形式为 $object rdf:type $class 的三元组。

【问题讨论】:

    标签: rdf sparql dbpedia


    【解决方案1】:

    要弄清楚三元组的来源,您可以做的一件事是使用GRAPH,如

    SELECT DISTINCT * WHERE {
    GRAPH ?g { <http://dbpedia.org/ontology/Person> ?x ?y }
    }
    LIMIT 20
    

    哪个,使用 Virtuoso 客户端,找到与没有它们的查询相同的三元组,但会显示从哪些图三元组获得,例如,

    http://dbpedia.org                   rdf:type owl:Class
    http://dbpedia.org/resource/classes# rdf:type owl:Class
    

    现在,我认为http://dbpedia.com 是一个默认图,其中包含所有其他三元组,所以这里有趣的可能是http://dbpedia.org/resource/classes#。根据 Ben Companjen 的回答,我尝试使用 Ontology 数据集,当我运行以下查询时(如您的查询,但没有 LIMIT 5

    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    PREFIX owl: <http://www.w3.org/2002/07/owl#>
    PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
    
    SELECT DISTINCT * WHERE {
        <http://dbpedia.org/ontology/Person> ?p ?o
    }  
    

    我得到&lt;http://dbpedia.org/ontology/Person&gt; a owl:Class 的结果(它是倒数第二行)。如果 LIMIT 5 出现在原始查询中,您可能看不到该特定结果。

    $ /usr/local/lib/apache-jena-2.10.0/bin/arq \
        --data ~/Downloads/dbpedia_3.8.owl \
        --query dbpedia.sparql 
    -------------------------------------------------------------
    | p                   | o                                   |
    =============================================================
    | rdfs:label          | "person"@en                         |
    | rdfs:label          | "persona"@es                        |
    | rdfs:label          | "Person"@de                         |
    | rdfs:label          | "pessoa"@pt                         |
    | rdfs:label          | "personne"@fr                       |
    | owl:equivalentClass | <http://schema.org/Person>          |
    | rdfs:label          | "Πληροφορίες προσώπου"@el           |
    | rdfs:label          | "Oseba"@sl                          |
    | owl:equivalentClass | <http://xmlns.com/foaf/0.1/Person>  |
    | rdf:type            | owl:Class                           |
    | rdfs:subClassOf     | <http://dbpedia.org/ontology/Agent> |
    -------------------------------------------------------------
    

    【讨论】:

    • 这很有帮助。我想这应该可以解决问题。
    • 欢迎来到 StackOverflow!我希望这对你有用。如果答案回答了您的问题,请务必通过接受来感谢回答者(单击“接受”旁边的复选标记)。 SPARQLing 快乐!
    【解决方案2】:

    您需要DBpedia ontology。这定义了 http://dbpedia.org/ontology/ 命名空间中的类和属性。

    【讨论】:

    • 使用本体也容易得多,但我需要从 n-triples 中找到一种方法来做同样的事情。不过还是谢谢。
    • @user2353645 本体是RDF/XML格式,是RDF文档的一种序列化。 N-Triples 是另一种序列化格式。您的 SPARQL 引擎,只要它可以读取这两种格式,就可以与 RDF/XML 格式或 N-Triples 格式一起正常工作。
    • 明白。我想这是本地数据集上唯一可能的方法,即从 OWL 文件中获取本体,从 N-Triples 中获取主题。非常感谢!
    • @Arthur OWL 本体可以用 RDF 编码。实例数据可以编码为 OWL 本体中的语句。 RDF 可以以多种不同的格式进行序列化,但它们仍然是 RDF。您可以在 RDF/XML、N3、N-Triples 或 中序列化一个本体。这与数据是否在本地可用、来自互联网上的某个地方或完全来自其他地方没有任何关系。重要的是您获得了某种格式的 RDF,并且您的 SPARQL 引擎可以读取该格式。一旦读入,一切都一样。
    • 很可能您所追求的三元组仅编码在 OWL 文件中,而不是在 N-Triples 文件中。在这种情况下,没有办法使用 .nt 文件:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多