use of com.github.jsonldjava.core.JsonLdApi in project jena by apache.
the class JsonLDWriter method toJsonLDJavaAPI.
/**
* the JsonLD-java API object corresponding to a dataset and a JsonLD format.
*/
public static Object toJsonLDJavaAPI(RDFFormat.JSONLDVariant variant, DatasetGraph dataset, PrefixMap prefixMap, String baseURI, Context jenaContext) throws JsonLdError, JsonParseException, IOException {
JsonLdOptions opts = getJsonLdOptions(baseURI, jenaContext);
// we can benefit from the fact we know that there are no duplicates in the jsonld RDFDataset that we create
// (optimization in jsonld-java 0.8.3)
// see https://github.com/jsonld-java/jsonld-java/pull/173
// with this, we cannot call the json-ld fromRDF method that assumes no duplicates in RDFDataset
// Object obj = JsonLdProcessor.fromRDF(dataset, opts, new JenaRDF2JSONLD()) ;
final RDFDataset jsonldDataset = (new JenaRDF2JSONLD()).parse(dataset);
// JsonLdApi.fromRDF(RDFDataset, boolean) is "experimental" rather than "deprecated"
@SuppressWarnings("deprecation") Object // true because we know that we don't have any duplicate in jsonldDataset
obj = (new JsonLdApi(opts)).fromRDF(jsonldDataset, true);
if (variant.isExpand()) {
// nothing more to do
} else if (variant.isFrame()) {
Object frame = null;
if (jenaContext != null) {
frame = jenaContext.get(JSONLD_FRAME);
}
if (frame == null) {
throw new IllegalArgumentException("No frame object found in jena Context");
}
if (frame instanceof String) {
frame = JsonUtils.fromString((String) frame);
}
obj = JsonLdProcessor.frame(obj, frame, opts);
} else {
// compact or flatten
// we need a (jsonld) context. Get it from jenaContext, or create one:
Object ctx = getJsonldContext(dataset, prefixMap, jenaContext);
if (variant.isCompact()) {
obj = JsonLdProcessor.compact(obj, ctx, opts);
} else if (variant.isFlatten()) {
obj = JsonLdProcessor.flatten(obj, ctx, opts);
} else {
throw new IllegalArgumentException("Unexpected " + RDFFormat.JSONLDVariant.class.getName() + ": " + variant);
}
// replace @context in output?
if (jenaContext != null) {
Object ctxReplacement = jenaContext.get(JSONLD_CONTEXT_SUBSTITUTION);
if (ctxReplacement != null) {
if (obj instanceof Map) {
@SuppressWarnings("unchecked") Map<String, Object> map = (Map<String, Object>) obj;
if (map.containsKey("@context")) {
map.put("@context", JsonUtils.fromString(ctxReplacement.toString()));
}
}
}
}
}
return obj;
}
Aggregations