docs: private Node objectToRDF(Object item) {
          // convert value object to RDF
          if (isValue(item)) {
              final Object value = ((Map<String, Object>) item).get("@value");
              final Object datatype = ((Map<String, Object>) item).get("@type");
  
              // convert to XSD datatypes as appropriate
              if (value instanceof Boolean || value instanceof Number) {
                  // convert to XSD datatype
                  if (value instanceof Boolean) {
                      return new Literal(value.toString(),
                              datatype == null ? XSD_BOOLEAN : (String) datatype, null);
                  } else if (value instanceof Double || value instanceof Float
                          || XSD_DOUBLE.equals(datatype)) {
                      if (value instanceof Double && !Double.isFinite((double) value)) {
                          return new Literal(Double.toString((double) value),
                                  datatype == null ? XSD_DOUBLE : (String) datatype, null);
                      } else if (value instanceof Float && !Float.isFinite((float) value)) {
                          return new Literal(Float.toString((float) value),
                                  datatype == null ? XSD_DOUBLE : (String) datatype, null);
                      } else {
                          // canonical double representation
                          final DecimalFormat df = new DecimalFormat("0.0###############E0");
                          df.setDecimalFormatSymbols(DecimalFormatSymbols.getInstance(Locale.US));
                          return new Literal(df.format(value),
                                  datatype == null ? XSD_DOUBLE : (String) datatype, null);
                      }
                  } else {
                      final DecimalFormat df = new DecimalFormat("0");
                      return new Literal(df.format(value),
                              datatype == null ? XSD_INTEGER : (String) datatype, null);
                  }
              } else if (((Map<String, Object>) item).containsKey("@language")) {
                  return new Literal((String) value,
                          datatype == null ? RDF_LANGSTRING : (String) datatype,
                          (String) ((Map<String, Object>) item).get("@language"));
              } else {
                  return new Literal((String) value,
                          datatype == null ? XSD_STRING : (String) datatype, null);
              }
          }
          // convert string/node object to RDF
          else {
              final String id;
              if (isObject(item)) {
                  id = (String) ((Map<String, Object>) item).get("@id");
                  if (JsonLdUtils.isRelativeIri(id)) {
                      return null;
                  }
              } else {
                  id = (String) item;
              }
              if (id.indexOf("_:") == 0) {
                  // NOTE: once again no need to rename existing blank nodes
                  return new BlankNode(id);
              } else {
                  return new IRI(id);
              }
          }
      }