in commons-rdf-jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdRDF.java [98:130]
public Node asJsonLdNode(final RDFTerm term) {
if (term instanceof JsonLdBlankNode) {
final JsonLdBlankNode jsonLdBlankNode = (JsonLdBlankNode) term;
if (jsonLdBlankNode.uniqueReference().startsWith(bnodePrefix)) {
// Only return blank nodes 'as is' if they have the same prefix
return jsonLdBlankNode.asJsonLdNode();
}
} else if (term instanceof JsonLdTerm) {
// non-Bnodes can always be return as-is
return ((JsonLdTerm) term).asJsonLdNode();
}
if (term instanceof IRI) {
return new RDFDataset.IRI(((IRI) term).getIRIString());
}
if (term instanceof BlankNode) {
final String ref = ((BlankNode) term).uniqueReference();
if (ref.startsWith(bnodePrefix)) {
// one of our own (but no longer a JsonLdBlankNode),
// we can recover the label after our unique prefix
return new RDFDataset.BlankNode(ref.replace(bnodePrefix, ""));
}
// The "foreign" unique reference might not be a valid bnode string,
// we'll convert to a UUID
final UUID uuid = UUID.nameUUIDFromBytes(ref.getBytes(StandardCharsets.UTF_8));
return new RDFDataset.BlankNode("_:" + uuid);
}
if (term instanceof Literal) {
final Literal literal = (Literal) term;
return new RDFDataset.Literal(literal.getLexicalForm(), literal.getDatatype().getIRIString(),
literal.getLanguageTag().orElse(null));
}
throw new IllegalArgumentException("RDFTerm not instanceof IRI, BlankNode or Literal: " + term);
}