当前位置: 首页 > 知识库问答 >
问题:

按特定语言的标签检索DBpedia本体类?

郭均
2023-03-14

我有从http://wiki.DBPedia.org/downloads39下载的DBPedia本体。在这个本体中,我有,比如说,这样的情况:

<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类,它的对象是法语中的“Ligue de Balleta”。我不知道在这种情况下如何使用Jena库来设置法语。

从DBPedia本体来看,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());
            }

但我得到的只有:

共有1个答案

程志新
2023-03-14

您需要阅读RDF中的文字以及它们是如何在RDF/XML中编码的。您所展示的本体片段是RDF/XML格式的(它不是为人类可读而设计的),xml:lang不是一个属性。xml:lang属性用于指定具有语言标记的文字的语言。

RDF/XML允许使用XML1.0[XML]的2.12 Language Identification定义的XML:lang属性来标识内容语言。可以在任何节点元素或属性元素上使用xml:lang属性,以指示所包含的内容使用的是给定的语言。包含XML文本的类型化文本不受此属性的影响。当前最特定的范围内语言(如果有的话)应用于属性元素、字符串、文字内容或属性属性值。xml:lang=“”表单表示没有语言标识符。

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

<?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>
<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 .

在DBpedia数据中也是如此。属性rdfs:label有多个值,并且RDF/XML序列化中的xml:lang属性用于指示它们的语言。DBpedia目前对我来说是不可用的,但是如果您访问http://DBpedia.org/ontology/basketballague并滚动到页面底部,您就可以下载各种格式的数据。如果以TTL/N3格式下载,您将看到如下内容:

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

您需要使用getObject获得谓词的对象,它是否是带有isLiteral的文字,以及当它是时,使用getLanguage获得语言标记(如果它有的话)。相关类的Javadocs描述了您需要的所有方法。我已经在本段前面链接到了literal类。

 类似资料:
  • 主要内容:结构体标签的格式,从结构体标签中获取值,结构体标签格式错误导致的问题通过 reflect.Type 获取结构体成员信息 reflect.StructField 结构中的 Tag 被称为结构体标签(Struct Tag)。结构体标签是对结构体字段的额外信息标签。 JSON、BSON 等格式进行序列化及对象关系映射(Object Relational Mapping,简称 ORM)系统都会用到结构体标签,这些系统使用标签设定字段在处理时应该具备的特殊属性和可能发生的行

  • 问题内容: 使用JDBC时,我经常遇到类似 我问自己(也包括代码作者)为什么不使用标签来检索列值: 我听到的最好的解释是关于性能的。但是实际上,这使处理速度非常快吗?我不相信,尽管我从未进行过测量。我认为,即使按标签检索会稍慢一些,但它仍具有更好的可读性和灵活性。 因此,有人可以给我很好的解释,避免使用列索引而不是列标签来检索列值吗?两种方法的优缺点(也许涉及某些DBMS)是什么? 问题答案: 默

  • 我尝试翻译掩码内容元素中的一些标签(TYPO3 10)。我首先创建了掩码元素,掩码创建了一个目录“typo3conf/ext/mask_project”。我创建了文件typo3conf/extmask_project/Resources/Private/Language/locallang.xlf,并在其中放置了一个标签read_more。 在我的流体模板(“typo3conf/ext/mask_

  • 问题内容: 好吧,说我有这个: 如果我想获得值“ 2”时选择“选项B”,选择器会是什么样? 请注意,这不是在询问如何获取 选定的 文本值,而是询问其中的任何一个(是否选择),具体取决于value属性。我试过了: 但这是行不通的。 问题答案: 它正在寻找ID 为且属性等于的元素。 您想要的是的孩子:

  • 问题内容: 我正在使用一个每个键有两个值的Multimap。下面是我用来分别获取每个值的代码: 代码的第一位获取第一个对象值: 然后,我正在使用另一种方法来检索其他值。此方法将第一个对象作为参数: 这似乎是一种“骇人的”做事方式,那么我有什么办法可以更轻松地获得价值? 问题答案:

  • 主要内容:JEP 314 - Unicode 语言标签扩展JEP 314 - Unicode 语言标签扩展 Java 7 引入了对BCP 47语言标签的支持。但是这个 unicode 语言环境扩展仅限于日历和数字。在 Java 10 中,java.util.Locale和相关类已更新,以实现LDML 规范中指定的其他 unicode 扩展。添加了以下扩展特性。 cu : 货币类型 fw : 一周的第一天 rg : 区域覆盖 tz : 时区 以下 API