耶拿-如何将资源链接到资源?

时间:2018-11-25 19:36:04

标签: java properties resources jena

我正在为用于特定数据结构的欧洲数据模型(EDM)实施框架,当我要添加属性时遇到问题。例如,考虑以下简单示例(使用Apache Jena 3.9 ):

public static void main(String[] args) {
    String NS = "http://my.com/";
    Model model = ModelFactory.createDefaultModel();
    model.setNsPrefix("edm", EDM_TEST.getURI());
    model.setNsPrefix("skos", SKOS.getURI());

    Resource repository = model.createResource(NS + "testing_agent");
    repository.addProperty(RDF.type, EDM_TEST.Agent);
    repository.addProperty(SKOS.altLabel, model.createLiteral("Vasile Alecsandri Museum"));
    repository.addProperty(SKOS.prefLabel, model.createLiteral("Vasile Alecsandri National Museum"));

    Resource providedCHO = model.createResource(NS + "testing_cho");
    providedCHO.addProperty(RDF.type, EDM_TEST.ProvidedCHO);
    providedCHO.addProperty(EDM_TEST.currentLocation, repository);

    StringWriter out = new StringWriter();
    model.write(out, "RDF/XML");
    String result = out.toString();
    System.out.println(result);
}

结果似乎还可以:

<edm:ProvidedCHO rdf:about="http://my.com/testing_cho">
    <edm:currentLocation>
      <edm:Agent rdf:about="http://my.com/testing_agent">
        <skos:prefLabel>Vasile Alecsandri National Museum</skos:prefLabel>
        <skos:altLabel>Vasile Alecsandri Museum</skos:altLabel>
      </edm:Agent>
    </edm:currentLocation>
</edm:ProvidedCHO>

但这不行,因为EDM不允许 currentLocation 属性使用内部对象。因此,我需要为currentLocation属性生成以下输出:

<edm:ProvidedCHO rdf:about="http://my.com/testing_cho">
    <edm:currentLocation rdf:resource="http://my.com/testing_agent"/>
</edm:ProvidedCHO>
<edm:Agent rdf:about="http://my.com/testing_agent">
    <skos:prefLabel>Vasile Alecsandri National Museum</skos:prefLabel>
    <skos:altLabel>Vasile Alecsandri Museum</skos:altLabel>
</edm:Agent>

如上所述,如何分别创建存储库资源(代理)并从提供的CHO资源链接到 currentLocation 属性?

1 个答案:

答案 0 :(得分:1)

Jena 3.0.1和3.9.0之间的区别是RDF / XMl writer的默认选择从普通更改为漂亮。

使用

可以更好地控制格式详细信息的选择
RDFDataMgr.write(..,..,RDFFormat.RDFXML_ABBREV)

RDFDataMgr.write(..,..,RDFFormat.RDFXML_PLAIN)

更多控制可用:

http://jena.staging.apache.org/documentation/io/rdfxml_howto.html#advanced-rdfxml-output

要创建一个非常特殊的XML模式,您可能需要取出数据,然后运行XSLT。