Jena 3.0.1和3.1.0,RDF / XML到JSON-LD缺少前缀

时间:2016-08-12 14:53:21

标签: java jena json-ld

我们最近从3.0.1切换到Jena 3.1.0并且发现Jena将JSON-LD写入字符串格式的方式发生了变化。

下面是JSON-LD与Jena 3.0.1的相似之处:

{
"@graph" : [ {
    "@id" : "data:4d1a75b0-484f-4dfa-998f-4382f34e411f",
    "@type" : "assertion:assertion",
    "data:UUID" : "4d1a75b0-484f-4dfa-998f-4382f34e411f"
  }, {
    "@id" : "data:UUID",
    "@type" : "owl:DatatypeProperty",
    "rdfs:label" : {
      "@language" : "en",
      "@value" : "UUID"
    }
  }, {
    "@id" : "urn:example.data.1.0",
    "@type" : "owl:Ontology",
    "rdfs:comment" : {
      "@language" : "en",
      "@value" : "This is an OWL ontology to describe data."
    },
    "rdfs:label" : {
      "@language" : "en",
      "@value" : "Data ontology"
    },
    "owl:versionInfo" : "1.0"
  }, {
    "@id" : "assertion:assertion",
    "@type" : "owl:Class",
    "subClassOf" : "data:entity"
  } ],
  "@context" : {
    "comment" : {
      "@id" : "http://www.w3.org/2000/01/rdf-schema#comment",
      "@type" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
    },
    "label" : {
      "@id" : "http://www.w3.org/2000/01/rdf-schema#label",
      "@type" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
    },
    "versionInfo" : {
      "@id" : "http://www.w3.org/2002/07/owl#versionInfo",
      "@type" : "http://www.w3.org/2001/XMLSchema#string"
    },
    "UUID" : {
      "@id" : "urn:example.data#UUID",
      "@type" : "http://www.w3.org/2001/XMLSchema#string"
    },
    "subClassOf" : {
      "@id" : "http://www.w3.org/2000/01/rdf-schema#subClassOf",
      "@type" : "@id"
    },
    "data" : "urn:example.data#",
    "rdf" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "owl" : "http://www.w3.org/2002/07/owl#",
    "xsd" : "http://www.w3.org/2001/XMLSchema#",
    "rdfs" : "http://www.w3.org/2000/01/rdf-schema#",
    "assertion" : "urn:example.data.assertion#"
  }
}

以下是Jena 3.1.0中JSON-LD的样子:

{
  "@graph" : [ {
    "@id" : "data:4d1a75b0-484f-4dfa-998f-4382f34e411f",
    "@type" : "assertion:assertion",
    "UUID" : "4d1a75b0-484f-4dfa-998f-4382f34e411f"
  }, {
    "@id" : "data:UUID",
    "@type" : "owl:DatatypeProperty",
    "label" : {
      "@language" : "en",
      "@value" : "UUID"
    }
  }, {
    "@id" : "urn:example.data.1.0",
    "@type" : "owl:Ontology",
    "comment" : {
      "@language" : "en",
      "@value" : "This is an OWL ontology to describe data."
    },
    "label" : {
      "@language" : "en",
      "@value" : "Data ontology"
    },
    "versionInfo" : "1.0"
  }, {
    "@id" : "assertion:assertion",
    "@type" : "owl:Class",
    "subClassOf" : "data:entity"
  } ],
  "@context" : {
    "comment" : {
      "@id" : "http://www.w3.org/2000/01/rdf-schema#comment"
    },
    "label" : {
      "@id" : "http://www.w3.org/2000/01/rdf-schema#label"
    },
    "versionInfo" : {
      "@id" : "http://www.w3.org/2002/07/owl#versionInfo"
    },
    "UUID" : {
      "@id" : "urn:example.data#UUID"
    },
    "subClassOf" : {
      "@id" : "http://www.w3.org/2000/01/rdf-schema#subClassOf",
      "@type" : "@id"
    },
    "data" : "urn:example.data#",
    "rdf" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "owl" : "http://www.w3.org/2002/07/owl#",
    "xsd" : "http://www.w3.org/2001/XMLSchema#",
    "rdfs" : "http://www.w3.org/2000/01/rdf-schema#",
    "assertion" : "urn:example.data.assertion#"
  }
}

两者之间的区别在于名称空间前缀data:和rfds:不再出现在标签旁边,如UUID和label。

根据Jena,JSON-LD是有效的,但不幸的是我们需要将JSON-LD发送到期望这些前缀存在的服务器。

我们可以做些什么来控制输出?我们不是耶拿的专家,请带着小孩手套处理我们:(

以下是XML格式的原始邮件:

<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:data="urn:example.data#"
xmlns:assertion="urn:example.data.assertion#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:owl="http://www.w3.org/2002/07/owl#">
    <owl:Ontology rdf:about="urn:example.data.1.0">
        <owl:versionInfo>1.0</owl:versionInfo>
        <rdfs:label xml:lang="en">Data ontology</rdfs:label>
        <rdfs:comment xml:lang="en">This is an OWL ontology to describe data.</rdfs:comment>
    </owl:Ontology>
    <owl:Class rdf:about="urn:example.data.assertion#assertion">
        <rdfs:subClassOf rdf:resource="urn:example.data#entity"/>
    </owl:Class>
    <owl:DatatypeProperty rdf:about="urn:example.data#UUID">
        <rdfs:label xml:lang="en">UUID</rdfs:label>
    </owl:DatatypeProperty>
    <assertion:assertion rdf:about="urn:example.data#4d1a75b0-484f-4dfa-998f-4382f34e411f">
        <data:UUID>4d1a75b0-484f-4dfa-998f-4382f34e411f</data:UUID>
    </assertion:assertion>
</rdf:RDF>

以下是我们正在运行的最小代码:

    InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("convert-xml-json-test/temp.xml");
    String inputXml = IOUtils.toString(inputStream);

    // Convert the XML to RDF model
    StringReader stringReader = new StringReader(inputXml);
    Model model = ModelFactory.createDefaultModel();
    model.read(stringReader, null, RDFLanguages.RDFXML.getLabel());

    // Convert the model to JSON String
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    model.write(out, RDFLanguages.JSONLD.getLabel());
    outputJson = out.toString(StandardCharsets.UTF_8.toString());

我们非常有信心,这是由于Jena的变化,因为我们的最小测试项目只包括Jena,如mvn依赖项所示:下面的树

+- org.apache.jena:jena-tdb:jar:3.1.0:compile
|  +- org.apache.jena:jena-arq:jar:3.1.0:compile
|  |  +- org.apache.jena:jena-core:jar:3.1.0:compile
|  |  |  +- org.apache.jena:jena-iri:jar:3.1.0:compile
|  |  |  +- xerces:xercesImpl:jar:2.11.0:compile
|  |  |  |  \- xml-apis:xml-apis:jar:1.4.01:compile
|  |  |  +- commons-cli:commons-cli:jar:1.3:compile
|  |  |  \- org.apache.jena:jena-base:jar:3.1.0:compile
|  |  |     \- com.github.andrewoma.dexx:collection:jar:0.6:compile
|  |  +- org.apache.jena:jena-shaded-guava:jar:3.1.0:compile
|  |  +- org.apache.httpcomponents:httpclient:jar:4.2.6:compile
|  |  |  +- org.apache.httpcomponents:httpcore:jar:4.2.5:compile
|  |  |  \- commons-codec:commons-codec:jar:1.6:compile
|  |  +- com.github.jsonld-java:jsonld-java:jar:0.7.0:compile
|  |  |  +- com.fasterxml.jackson.core:jackson-core:jar:2.3.3:compile
|  |  |  +- com.fasterxml.jackson.core:jackson-databind:jar:2.3.3:compile
|  |  |  |  \- com.fasterxml.jackson.core:jackson-annotations:jar:2.3.0:compile
|  |  |  \- commons-io:commons-io:jar:2.4:compile
|  |  +- org.apache.httpcomponents:httpclient-cache:jar:4.2.6:compile
|  |  +- org.apache.thrift:libthrift:jar:0.9.2:compile
|  |  +- org.slf4j:jcl-over-slf4j:jar:1.7.20:compile
|  |  +- org.apache.commons:commons-csv:jar:1.0:compile
|  |  \- org.apache.commons:commons-lang3:jar:3.3.2:compile
|  \- org.slf4j:slf4j-api:jar:1.7.20:compile
\- junit:junit:jar:4.11:test
   \- org.hamcrest:hamcrest-core:jar:1.3:test

0 个答案:

没有答案