p:validate-with-json-schema (3.0) 
Validates a JSON document using JSON schema.
<p:declare-step type="p:validate-with-json-schema"> <input port="source" primary="true" content-types="json" sequence="false"/> <output port="result" primary="true" content-types="json" sequence="false"/> <input port="schema" primary="false" content-types="json" sequence="false"/> <output port="report" primary="false" content-types="xml json" sequence="true"/> <option name="assert-valid" as="xs:boolean" required="false" select="true()"/> <option name="default-version" as="xs:string?" required="false" select="()"/> <option name="parameters" as="map(xs:QName, item()*)?" required="false" select="()"/> <option name="report-format" as="xs:string" required="false" select="'xvrl'"/> </p:declare-step>
The p:validate-with-json-schema step validates the JSON document appearing on the source port using JSON Schema validation. The JSON schema (a
JSON document itself) is supplied through the schema port. The result port emits a copy of the source document.
Ports:
Port | Type | Primary? | Content types | Seq? | Description |
|---|---|---|---|---|---|
|
|
|
|
| The document to validate. |
|
|
|
|
| A verbatim copy of the document that appeared on the |
|
|
|
|
| The JSON schema to validate against. |
|
|
|
|
| A report that describes the validation results, both for valid and invalid source documents. The format for this report is determined by
the When the |
Options:
The p:validate-with-json-schema step applies JSON
Schemavalidation to the JSON document appearing on the source port. The JSON schema is supplied using the
schema port. The outcome of the step, what appears on the result port, is a verbatim copy of the source
document.
The p:validate-with-json-schema step has a parameters port of datatype map(xs:QName, item()*)?. This (optional) map passes
additional parameters for the validation process to the step:
The parameters in this map, their values and semantics are implementation-defined and therefore dependent on the XProc processor used.
A special entry with key c:compile (the c namespace prefix is bound to the standard XProc namespace
http://www.w3.org/ns/xproc-step) is reserved for parameters for the schema compilation (if applicable).
The value of this key must be a map itself.
If the report-format option is set to xvrl (default): Any entries with keys in the xvrl
namespace (http://www.xproc.org/ns/xvrl) are passed as parameters to the process that generates the XVRL report appearing on the report port. All standard XVRL generation parameters are
supported.
Assume we have a JSON input document, called input-valid.json, that looks like this:
{
"first_name": "Jane",
"last_name": "Doe"
}A JSON schema to validate this is as follows:
{
"$id": "https://example.com/schemas/customer",
"type": "object",
"properties": {
"first_name": {"type": "string"},
"last_name": {"type": "string"},
"email": {"type": "string"}
},
"required": [
"first_name",
"last_name"
]
}Performing this validation using the p:validate-with-json-schema step returns the following on the report port:
Pipeline document:
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" version="3.0">
<p:input port="source"/>
<p:output port="result" pipe="report@validate"/>
<p:validate-with-json-schema name="validate">
<p:with-input port="schema" href="example-json-schema.json"/>
</p:validate-with-json-schema>
</p:declare-step>Result document:
<report xmlns="http://www.xproc.org/ns/xvrl">
<metadata>
<timestamp>2025-09-03T14:56:06.7+02:00</timestamp>
<document href="file:/…/…/input-valid.json"/>
<schema href="file:/…/…/example-json-schema.json" schematypens="JsonSchema"/>
<validator name="networknt/json-schema-validator"/>
</metadata>
<digest fatal-error-count="0"
error-count="0"
warning-count="0"
info-count="0"
valid="true"/>
</report>Using the same JSON schema as in Basic usage (valid source document), we’re now going to validate an invalid
document (called input-invalid.json). Since we want to have a look at what comes out of the report port, we have to
set the assert-valid option to false.
{"last_name": "Doe"}Performing this validation using the p:validate-with-json-schema step returns the following on the report port:
Pipeline document:
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" version="3.0">
<p:input port="source"/>
<p:output port="result" pipe="report@validate"/>
<p:validate-with-json-schema assert-valid="false" name="validate">
<p:with-input port="schema" href="example-json-schema.json"/>
</p:validate-with-json-schema>
</p:declare-step>Result document:
<report xmlns="http://www.xproc.org/ns/xvrl">
<metadata>
<timestamp>2025-09-03T14:56:06.92+02:00</timestamp>
<document href="file:/…/…/input-invalid.json"/>
<schema href="file:/…/…/example-json-schema.json" schematypens="JsonSchema"/>
<validator name="networknt/json-schema-validator"/>
</metadata>
<detection severity="error" code="1028">
<location jsonpath="$"/>
<message>$.first_name: is missing but it is required</message>
</detection>
<digest fatal-error-count="0"
error-count="1"
warning-count="0"
info-count="0"
valid="false"/>
</report>p:validate-with-json-schema preserves all document-properties of the document appearing on its source port for the document on its
result port.
The document appearing on the report port only has a content-type property. It has no other
document-properties (also no base-uri).
Error code | Description |
|---|---|
It is a dynamic error if a report-format option was specified that the processor does not support. | |
It is a dynamic error if the selected version is not supported. | |
It is a dynamic error if the document supplied on | |
It is a dynamic error if the |
This description of the p:validate-with-json-schema step is for XProc version: 3.0. This is a non-required step (an XProc 3.0 processor does not have to support this).
The formal specification for the p:validate-with-json-schema step can be found here.
The p:validate-with-json-schema step is part of categories:
The p:validate-with-json-schema step is also present in version:
3.1.