我正在尝试使用Apache Jena为SKOS编写导出器实用程序。我的问题是更广泛或更窄的对象是嵌套的。我期待以下xml但使用嵌套元素获取xmls。我没有从教程中获得任何帮助。这只是一个格式化问题,还是与我编码的方式有关?
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:SKOS="http://www.w3.org/2004/02/skos/core#">
<SKOS:Concept rdf:about="http://lexicon.ai/P011">
<SKOS:broader>
<SKOS:Concept>
<SKOS:narrower>
<SKOS:Concept>
<SKOS:scopeNote>testb</SKOS:scopeNote>
<SKOS:prefLabel>Disease</SKOS:prefLabel>
</SKOS:Concept>
</SKOS:narrower>
<SKOS:scopeNote>testb</SKOS:scopeNote>
<SKOS:prefLabel>Disease</SKOS:prefLabel>
</SKOS:Concept>
</SKOS:broader>
<SKOS:altLabel>alt2</SKOS:altLabel>
<SKOS:altLabel>alt1</SKOS:altLabel>
<SKOS:scopeNote>test</SKOS:scopeNote>
<SKOS:prefLabel>Disease</SKOS:prefLabel>
</SKOS:Concept>
</rdf:RDF>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:SKOS="http://www.w3.org/2004/02/skos/core#">
<SKOS:Concept rdf:about="http://lexicon.ai/P011">
<SKOS:broader rdf:about="http://lexicon.ai/P012"/>
<SKOS:altLabel>alt2</SKOS:altLabel>
<SKOS:altLabel>alt1</SKOS:altLabel>
<SKOS:scopeNote>test</SKOS:scopeNote>
<SKOS:prefLabel>Disease</SKOS:prefLabel>
</SKOS:Concept>
<SKOS:Concept rdf:about="http://lexicon.ai/P012">
<SKOS:narrower rdf:about="http://lexicon.ai/P0121"/>
<SKOS:scopeNote>testb</SKOS:scopeNote>
<SKOS:prefLabel>Diseaseb</SKOS:prefLabel>
</SKOS:Concept>
<SKOS:Concept rdf:about="http://lexicon.ai/P0121">
<SKOS:scopeNote>testn</SKOS:scopeNote>
<SKOS:prefLabel>Diseasen</SKOS:prefLabel>
</SKOS:Concept>
</rdf:RDF>
Model model = ModelFactory.createDefaultModel();
model.setNsPrefix("SKOS", SKOS.uri);
Model model2 = ModelFactory.createDefaultModel();
model2.setNsPrefix("SKOS", SKOS.uri);
final Resource Entity = model.createResource(personURI);
final Resource broader1 = model.createResource();
final Resource nt1 = model.createResource();
nt1.addProperty(RDF.type, SKOS.Concept);
nt1.addProperty(SKOS.prefLabel, "Diseasen");
nt1.addProperty(SKOS.scopeNote, "testn");
broader1.addProperty(RDF.type, SKOS.Concept);
broader1.addProperty(SKOS.prefLabel, "Diseaseb");
broader1.addProperty(SKOS.scopeNote, "testb");
broader1.addProperty(SKOS.narrower, nt1);
Entity.addProperty(RDF.type, SKOS.Concept);
Entity.addProperty(SKOS.prefLabel, "Disease");
Entity.addProperty(SKOS.scopeNote, "test");
答案 0 :(得分:0)
&#34; http://lexicon.ai/P011&#34;未出现在代码示例Entity
中似乎未使用。
有两个model.createResource()
将创建2个空白节点。
&#34;实际&#34;输出显示一个资源是使用createResource("http://lexicon.ai/P011")
创建的,另一个是使用空白节点创建的。这看起来像是嵌套的原因。
要接近所需的输出,您需要使用命名资源,使用RDFFormat.RDFXML_PLAIN
编写更基本的作家RDFDataMgr.write
可能会更好。