【问题标题】:Retrieving DBpedia ontology classes by label in a particular language?通过特定语言的标签检索 DBpedia 本体类?
【发布时间】:2014-08-14 12:07:04
【问题描述】:

我有从http://wiki.dbpedia.org/Downloads39 下载的 DBPedia Ontology。 在这个本体中,我有例如这种情况:

<owl:Class rdf:about="http://dbpedia.org/ontology/BasketballLeague">
        <rdfs:label xml:lang="el">Ομοσπονδία Καλαθοσφαίρισης</rdfs:label><rdfs:label xml:lang="fr">ligue de basketball</rdfs:label><rdfs:label xml:lang="en">basketball league</rdfs:label><rdfs:label xml:lang="it">lega di pallacanestro</rdfs:label><rdfs:label xml:lang="ja">バスケットボールリーグ</rdfs:label><rdfs:comment xml:lang="en">a group of sports teams that compete against each other in Basketball</rdfs:comment><rdfs:subClassOf rdf:resource="http://dbpedia.org/ontology/SportsLeague"/>
</owl:Class>

现在,我想使用 Jena 阅读这个本体,并检索以法语为对象的 owl 类“联赛篮球”。我不知道如何使用 Jena 库将法语设置为这种情况。

从 DBPedia Ontology 看来,xml:lang="fr" 是一个谓词,但我试过这段代码:

String inputFileName = "C:\\dbpedia_3.9.owl";
// Create an empty in-memory ontology model 
OntDocumentManager mgr = new OntDocumentManager();
OntModelSpec s = new OntModelSpec( OntModelSpec.RDFS_MEM );
s.setDocumentManager( mgr );
OntModel m = ModelFactory.createOntologyModel( s, null );
// use the FileManager to open the ontology from the filesystem
InputStream in = FileManager.get().open(inputFileName);
if (in == null) {
    throw new IllegalArgumentException( "File: " + inputFileName + " not found"); 
}
// read the ontology file
m.read( in, "" );

StmtIterator stmti = m.listStatements();
            while (stmti.hasNext()){
                Statement statement = stmti.nextStatement();
                System.out.println (statement.getPredicate());
            }

但我只得到:

http://www.w3.org/2000/01/rdf-schema#label

我没有得到关于谓词中语言的信息。为什么? 我如何检索这些信息和 owl 类?我在这里做错了什么?

【问题讨论】:

  • 这个标题非常具有误导性。您不是在问如何检索类,而是如何检索特定语言的类的标签。

标签: java jena owl ontology dbpedia


【解决方案1】:

您需要阅读 RDF 中的文字以及它们是如何在 RDF/XML 中编码的。您展示的本体 sn-p 采用 RDF/XML(其设计目的不是为人类可读),并且 xml:lang 不是属性。 xml:lang 属性用于指定具有语言标记的文字的语言。

2.7 Languages: xml:lang

RDF/XML 允许使用 2.12 定义的 xml:lang 属性 语言识别 XML 1.0 [XML] 允许识别 的内容语言。 xml:lang 属性可以在任何节点上使用 元素或属性元素来指示包含的内容是 在给定的语言中。包含 XML 文字的类型化文字是 不受此属性影响。最具体的范围内语言 present(如果有)应用于属性元素字符串文字内容 或属性属性值。 xml:lang="" 形式表示 缺少语言标识符。

为 RDF 属性标记内容语言的一些示例是 如例 8 所示:

示例8:xml:lang的完整示例(example08.rdf输出example08.nt

<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:dc="http://purl.org/dc/elements/1.1/">
  <rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar">
    <dc:title>RDF/XML Syntax Specification (Revised)</dc:title>
    <dc:title xml:lang="en">RDF/XML Syntax Specification (Revised)</dc:title>
    <dc:title xml:lang="en-US">RDF/XML Syntax Specification (Revised)</dc:title>
  </rdf:Description>

  <rdf:Description rdf:about="http://example.org/buecher/baum" xml:lang="de">
    <dc:title>Der Baum</dc:title>
    <dc:description>Das Buch ist außergewöhnlich</dc:description>
    <dc:title xml:lang="en">The Tree</dc:title>
  </rdf:Description>
</rdf:RDF>

如果您查看上面链接的 example08.nt,您会看到三元组包括:

<http://www.w3.org/TR/rdf-syntax-grammar> <http://purl.org/dc/elements/1.1/title> "RDF/XML Syntax Specification (Revised)" .
<http://www.w3.org/TR/rdf-syntax-grammar> <http://purl.org/dc/elements/1.1/title> "RDF/XML Syntax Specification (Revised)"@en .
<http://www.w3.org/TR/rdf-syntax-grammar> <http://purl.org/dc/elements/1.1/title> "RDF/XML Syntax Specification (Revised)"@en-us .

<http://example.org/buecher/baum> <http://purl.org/dc/elements/1.1/title> "Der Baum"@de .
<http://example.org/buecher/baum> <http://purl.org/dc/elements/1.1/title> "The Tree"@en .

资源具有属性 dc:title 的多个值。 xml:lang 不是属性,而是用来指定文字的一部分。

在 DBpedia 数据中也是如此。属性 rdfs:label 有多个值,RDF/XML 序列化中的 xml:lang 属性用于表示它们的语言。我目前无法使用 DBpedia,但是如果您转到 http://dbpedia.org/ontology/BasketballLeague 并滚动到页面底部,您将能够下载各种格式的数据。如果你以 TTL/N3 格式下载它,你会看到类似这样的内容:

dbpedia-owl:BasketballLeague rdfs:label "basketball league"@en ,
                                        "Ομοσπονδία Καλαθοσφαίρισης""@el ,
                                        "ligue de basketball"@fr, 
                                        ... 

需要用getObject获取谓词的对象,用isLiteral是否是literal,如果有则用getLanguage获取语言标签。相关类的 Javadocs 描述了您需要的所有方法。我已经链接到本段前面的文字类。

【讨论】:

  • 好的,谢谢!我以为 xml:Lang 是谓词,但我错了。
  • @Musich87 RDF/XML 并非设计为人类可读或可写的语法。以 TTL/N3 格式(或有时是 N-Triples)查看数据几乎总是更可取的,因为它可以更清楚地显示数据。 RDF/XML 是通过为针对 XML 的 RDF 定义编码方案来利用 XML 处理工具的尝试。它有很多小的边缘情况,相同的数据可以用很多不同的方式表示。用另一种语法查看你的数据,你的数据是什么会更清楚。
猜你喜欢
  • 1970-01-01
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
相关资源
最近更新 更多