JSON-LD to Normalized Form — Numio
Canonicalizes JSON-LD into sorted N-Quads using jsonld.normalize with its default URDNA2015 algorithm. Blank nodes get deterministic labels (_:c14n0, _:c14n1), so equal graphs produce identical text.
Producing the canonical form that is hashed or signed for Verifiable Credentials and Linked Data Proofs.
When to use it
- Producing the canonical form that is hashed or signed for Verifiable Credentials and Linked Data Proofs.
- Checking whether two JSON-LD documents with different layouts or contexts describe the same graph.
How to use
- Paste the JSON-LD document into the JSON-LD editor.
- Read the canonical N-Quads: one triple per line, sorted, with blank nodes renamed to _:c14nN.
- Diff or hash the output text to compare graphs.
JSON-LD
{
"@context": {"@vocab": "http://schema.org/"},
"@type": "Person",
"name": "Jane Doe",
"address": {
"@type": "PostalAddress",
"addressLocality": "Seattle"
}
}Canonical N-Quads
_:c14n0 <http://schema.org/addressLocality> "Seattle" . _:c14n0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/PostalAddress> . _:c14n1 <http://schema.org/address> _:c14n0 . _:c14n1 <http://schema.org/name> "Jane Doe" . _:c14n1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Person> .
Details and limitations
The page calls normalize without options, so jsonld.js uses URDNA2015 and N-Quads output.
Blank node labels depend on the graph content, not on the order of keys in your JSON.
Runs in your browser; remote @context URLs are fetched by your browser. If the download fails, the page shows an error naming the context URL.
FAQ
How is this different from the JSON-LD to N-Quads page?
Both output N-Quads. This page relabels blank nodes canonically (_:c14n0) and sorts the lines; the N-Quads page keeps processor-assigned labels like _:b0.
Which canonicalization algorithm is used?
URDNA2015, the default in jsonld.js, which was standardized by the W3C as RDF Dataset Canonicalization (RDFC-1.0).
Why is a property missing from the output?
Keys not defined in the @context do not expand to IRIs and are dropped before conversion to quads.