Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用特定语言按标签检索DBpedia本体类?_Java_Jena_Owl_Ontology_Dbpedia - Fatal编程技术网

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

Java 用特定语言按标签检索DBpedia本体类?,java,jena,owl,ontology,dbpedia,Java,Jena,Owl,Ontology,Dbpedia,我有从中下载的DBPedia本体。 在这个本体中,我有,例如,这种情况: ⑩∑π∑νΔαλαθ∑φα∑ρ∑η∑法バスケットボールリーグ在篮球比赛中互相竞争的一组运动队 现在,我想使用Jena阅读这个本体,并检索以法语为对象“ligue de basketball”的owl类。在这种情况下,我不知道如何使用Jena库设置法语 从DBPedia本体来看,xml:lang=“fr”似乎是一个谓词,但我尝试了以下代码: String inputFileName = "C:\\dbpedia_3.9.

我有从中下载的DBPedia本体。 在这个本体中,我有,例如,这种情况:


⑩∑π∑νΔαλαθ∑φα∑ρ∑η∑法バスケットボールリーグ在篮球比赛中互相竞争的一组运动队
现在,我想使用Jena阅读这个本体,并检索以法语为对象“ligue de basketball”的owl类。在这种情况下,我不知道如何使用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());
            }
但我只得到:

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

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

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

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

示例8:xml:lang(输出)的完整示例

RDF/XML语法规范(修订版)
RDF/XML语法规范(修订版)
RDF/XML语法规范(修订版)
德鲍姆
这是我的朋友
树
如果查看上面链接的example08.nt,您将看到三元组包括:

“RDF/XML语法规范(修订版)”。
“RDF/XML语法规范(修订版)”@en。
“RDF/XML语法规范(修订版)”@en us。
德尔鲍姆。
“树”@en。
这些资源具有属性dc:title的多个值。xml:lang不是属性,但用于指定文本的一部分

DBpedia数据也是如此。属性rdfs:label有多个值,RDF/xml序列化中的xml:lang属性用于指示它们的语言。DBpedia目前不可用,但如果转到并滚动到页面底部,您将能够以各种形式下载数据ts。如果以TTL/N3格式下载,您将看到如下内容:

dbpedia-owl:BasketballLeague-rdfs:label“basketball-league”@en,
“БμοσπονΔίαλαθοσφαρισης”@el,
“篮球之法”@fr,
... 

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

这个标题很容易引起误解。你问的不是如何检索类,而是如何检索特定语言中类的标签。好的,谢谢!我认为xml:Lang是一个谓词,但我错了。@Musich87 RDF/xml并不是设计成人类可读或可写的语法。几乎总是最好以TTL/N3格式(有时是N-Triples)查看数据,因为它可以更清楚地显示数据。RDF/XML试图通过为RDF定义一个以XML为目标的编码方案来利用XML处理工具。它有很多小的边缘情况,相同的数据可以用很多不同的方式表示。用另一种语法查看数据,会更清楚地知道数据是什么。