note that regarding the code that I sent, it was probably enough to just add 
the @vocab node (removing the props in the ns is just a matter of clarity of 
the output, and of not wasting bandwidth). 

> Le 20 févr. 2017 à 15:47, François-Paul Servant 
> <[email protected]> a écrit :
> 
> Hi Elie,
> 
> (I wrote the comment in the line you point to. And then forgot it).
> 
> The fix is probably more than one line (it must take care of the other parts 
> of the definition of the “context" passed to the JSON-LD java API, and of the 
> behavior of that API when it includes an @vocab)
> 
> I’ll try to see what can be done. In the meantime, you maybe can use a new 
> possibility in 3.2.0: you can access the object that jena creates and pass to 
> the JSON-LD java API. You can modify it before sending it to the JSON-LD java 
> API. Please find below a quick example.
> 
> HTH
> 
> fps
> 
> /* Created on 20 févr. 2017 */
> package com.renault.sicg.rasse.commons;
> 
> import java.io.IOException;
> import java.io.PrintWriter;
> import java.util.ArrayList;
> import java.util.List;
> import java.util.Map;
> import java.util.Map.Entry;
> 
> import org.apache.jena.query.DatasetFactory;
> import org.apache.jena.rdf.model.Model;
> import org.apache.jena.rdf.model.ModelFactory;
> import org.apache.jena.rdf.model.Resource;
> import org.apache.jena.riot.RDFFormat;
> import org.apache.jena.riot.system.PrefixMap;
> import org.apache.jena.riot.system.RiotLib;
> import org.apache.jena.riot.writer.JsonLDWriter;
> import org.apache.jena.sparql.core.DatasetGraph;
> import org.apache.jena.sparql.util.Context;
> import org.apache.jena.sparql.vocabulary.FOAF;
> import org.apache.jena.vocabulary.RDF;
> import org.junit.Test;
> 
> import com.fasterxml.jackson.core.JsonParseException;
> import com.github.jsonldjava.core.JsonLdError;
> import com.github.jsonldjava.utils.JsonUtils;
> 
> public class AtVocab {
> @Test public final void test() throws JsonParseException, JsonLdError, 
> IOException {
>  Model m = ModelFactory.createDefaultModel();
>  String ns = "http://schema.org/";;
>  Resource person = m.createResource(ns + "Person");
>  Resource s = m.createResource();
>  m.add(s, m.createProperty(ns + "name"), "Jane Doe");
>  m.add(s, m.createProperty(ns + "url"), "http://www.janedoe.com";);
>  m.add(s, m.createProperty(ns + "jobTitle"), "Professor");
>  m.add(s, FOAF.nick, "jd");
>  m.add(s, RDF.type, person);
> 
>  m.setNsPrefix("", ns);
> 
>  DatasetGraph g = DatasetFactory.create(m).asDatasetGraph();
>  PrefixMap pm = RiotLib.prefixMap(g);
>  String base = null;
>  Context jenaContext = null;
> 
>  // the JSON-LD API object. It's a map
>  Map map = (Map) 
> JsonLDWriter.toJsonLDJavaAPI((RDFFormat.JSONLDVariant)RDFFormat.JSONLD.getVariant()
>          , g, pm, base, jenaContext);
> 
>  // get the @context:
>  Map<String, Object> ctx = (Map<String, Object>) map.get("@context");
> 
>  // add the "@vocab" key, to ctx
>  // and remove from it declaration of props in ns
> 
>  // remove from ctx declaration of props in ns
>  List<String> remove = new ArrayList<>();
>  for (Entry<String, Object> e : ctx.entrySet()) {
>      // is it the declaration of a prop in ns?
>      Object o = e.getValue();
>      if (o instanceof Map) {
>          o = ((Map) o).get("@id");
>      }           
>      if ((o != null) && (o instanceof String)) {
>          if (((String) o).equals(ns + e.getKey())) {
>              remove.add(e.getKey());
>          }
>      }
>  }
>  for (String key : remove) {
>      ctx.remove(key);
>  }
> 
>  // add the "@vocab" key to ctx 
>  ctx.put("@vocab", "http://schema.org/";);
> 
>  JsonUtils.writePrettyPrint(new PrintWriter(System.out), map) ;
> }
> 
> }
> 

Reply via email to