2017-04-04 58 views
1

我有一個任務,但我需要將一些以JSON形式表示的大量數據轉換爲JSON-LD。我想用this執行JSON-LD Java實現,但我不明白,我該怎麼做。在Java中將JSON序列化爲JSON-LD的代碼示例?

我看了網站上的教程,並在互聯網上閱讀了一些關於JSON-LD的內容,但是還不明白最簡單的東西:我如何將JSON轉換爲JSON LD?

例如,我有這樣的代碼在JSON:

{ 
    "name" : "Andreas", 
    "age" : 20, 
    "profession" : "student", 
    "personalWebsite" : "example.com" 
} 

我應該怎麼辦呢?像context.add(「example.com」)?

InputStream inputStream = new FileInputStream("C:\Users\Albert\input.json"); 
Object jsonObject = JsonUtils.fromInputStream(inputStream); 
Map context = new HashMap(); 
JsonLdOptions options = new JsonLdOptions(); 

回答

0

爲您的數據添加'@context'條目。

{ 
    "name" : "Andreas", 
    "age" : 20, 
    "profession" : "student", 
    "personalWebsite" : "example.com", 
    "@context":"http://schema.org/" 
} 

你的JSON-LD處理器將完成剩下的(因爲0.9版本)

由於測試您可以將JSON轉換成RDF。

package overflow.stack2449461; 

import java.io.ByteArrayInputStream; 
import java.io.InputStream; 
import java.io.StringWriter; 
import java.util.Collection; 


import org.eclipse.rdf4j.model.Statement; 
import org.eclipse.rdf4j.rio.RDFFormat; 
import org.eclipse.rdf4j.rio.RDFHandlerException; 
import org.eclipse.rdf4j.rio.RDFParser; 
import org.eclipse.rdf4j.rio.RDFWriter; 
import org.eclipse.rdf4j.rio.Rio; 
import org.eclipse.rdf4j.rio.helpers.StatementCollector; 


public class Test { 
    @org.junit.Test 
    public void testForYourCode() { 
     String data = "{\"name\" : \"Andreas\",\"age\" : 20,\"profession\" : \"student\", \"personalWebsite\" : \"example.com\",\"@context\": \"http://schema.org/\"}"; 
     try (InputStream in = new ByteArrayInputStream(data.getBytes("utf-8"))) { 
      String dataAsRdf = readRdfToString(in, RDFFormat.JSONLD, RDFFormat.NTRIPLES, ""); 
      System.out.println(dataAsRdf); 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
    } 

    /** 
    * @param in 
    *   a rdf input stream 
    * @param inf 
    *   the rdf format of the input stream 
    * @param outf 
    *   the output format 
    * @param baseUrl 
    *   usually the url of the resource 
    * @return a string representation 
    */ 
    public static String readRdfToString(InputStream in, RDFFormat inf, RDFFormat outf, String baseUrl) { 
     Collection<Statement> myGraph = null; 
     myGraph = readRdfToGraph(in, inf, baseUrl); 
     return graphToString(myGraph, outf); 
    } 

    /** 
    * @param inputStream 
    *   an Input stream containing rdf data 
    * @param inf 
    *   the rdf format 
    * @param baseUrl 
    *   see sesame docu 
    * @return a Graph representing the rdf in the input stream 
    */ 
    public static Collection<Statement> readRdfToGraph(final InputStream inputStream, final RDFFormat inf, 
      final String baseUrl) { 
     try { 
      final RDFParser rdfParser = Rio.createParser(inf); 
      final StatementCollector collector = new StatementCollector(); 
      rdfParser.setRDFHandler(collector); 
      rdfParser.parse(inputStream, baseUrl); 
      return collector.getStatements(); 
     } catch (final Exception e) { 
      throw new RuntimeException(e); 
     } 
    } 

    /** 
    * Transforms a graph to a string. 
    * 
    * @param myGraph 
    *   a sesame rdf graph 
    * @param outf 
    *   the expected output format 
    * @return a rdf string 
    */ 
    public static String graphToString(Collection<Statement> myGraph, RDFFormat outf) { 
     StringWriter out = new StringWriter(); 
     RDFWriter writer = Rio.createWriter(outf, out); 
     try { 
      writer.startRDF(); 
      for (Statement st : myGraph) { 
       writer.handleStatement(st); 
      } 
      writer.endRDF(); 
     } catch (RDFHandlerException e) { 
      throw new RuntimeException(e); 
     } 
     return out.getBuffer().toString(); 
    } 

} 

隨着pom.xml的

<dependency> 
     <groupId>org.eclipse.rdf4j</groupId> 
     <artifactId>rdf4j-runtime</artifactId> 
     <version>2.2</version> 
     <type>pom</type> 
    </dependency> 
    <dependency> 
     <groupId>com.github.jsonld-java</groupId> 
     <artifactId>jsonld-java</artifactId> 
     <version>0.10.0</version> 
    </dependency> 

它將打印JSON字符串作爲RDF NTRIPLES

_:b0 <http://schema.org/age> "20"^^<http://www.w3.org/2001/XMLSchema#integer> . 
_:b0 <http://schema.org/name> "Andreas" . 
_:b0 <http://schema.org/personalWebsite> "example.com" . 
_:b0 <http://schema.org/profession> "student" .