This pipeline validates twice, once without requiring validity (the '*' in the first validation step below) and once requiring it (the 'valid' in the second validation step below). In between all element infoitems not known to the schema are discarded. For a discussion of how this can be used to support versioning of XML languages, see Versioning made easy. You can see below both the XML form and a snapshot of the pipeline authoring tool display for this pipeline.
<p:pipeline xmlns:p="http://www.w3.org/2002/02/xml-pipeline"
xmlns:pe="http://ns.markuptechnology.com/runtime/pipelines/v1">
<p:processdef name="eliminate" definition="MT_Eliminate"/>
<p:processdef name="validate" definition="MT_W3C_XML_Schema_1.0"/>
<p:process type="validate">
<p:input label="$IN"/>
<p:input name="schema" label="schemaDoc"/>
<p:param name="validity" select="*"/>
<p:output label="#i2.1"/>
</p:process>
<p:process type="eliminate">
<p:input label="#i2.1"/>
<p:param name="select" select="*[pe:validity()='notKnown']"/>
<p:output label="#i4.1"/>
</p:process>
<p:process type="validate">
<p:input label="#i4.1"/>
<p:input name="schema" label="schemaDoc"/>
<p:param name="validity" select="valid"/>
<p:output label="$OUT"/>
</p:process>
</p:pipeline>
