Viewport 004

Test that the match attribute can be an AVT with a static variable reference. (Yes, I know, using the prefix this way is utterly absurd. It’s a unit test.)

Test nw-viewport-004.xml is expected to pass.

The pipeline


<p:declare-step xmlns:ex="http://example.com/sample" xmlns:p="http://www.w3.org/ns/xproc" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="3.0">
   <p:option name="gi" static="true" select="xs:QName('ex:p')"/>
   <p:output port="result"/>
   <p:input port="source"/>
   <p:viewport match="*[node-name(.) = $gi]">
      <p:add-attribute attribute-name="v" attribute-value="true" match="/*"/>
   </p:viewport>
</p:declare-step>
MorganaXProc passing XML Calabash passing

Inputs

port = source


<doc xmlns="http://example.com/sample">
   <title>Some Title</title>
   <p>A paragraph.</p>
   <note xml:id="note">
      <p>A paragraph in note.</p>
   </note>
</doc>

Schematron validation


<s:schema xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt2">
   <s:ns prefix="ex" uri="http://example.com/sample"/>
   <s:pattern>
      <s:rule context="/">
         <s:assert test="ex:doc">The pipeline root is not “doc”.</s:assert>
         <s:assert test="count(ex:doc//ex:p)=2">The pipeline root does not have two descendants "ex:p".</s:assert>
      </s:rule>
      <s:rule context="ex:p">
         <s:assert test=".[@v='true']">The ‘p’ elements don’t have the correct ‘v’ attributes.</s:assert>
      </s:rule>
      <s:rule context="*[not(self::ex:p)]">
         <s:assert test=".[not(@v)]">The ‘v’ attribute appears on the wrong element(s).</s:assert>
      </s:rule>
   </s:pattern>
</s:schema>

Revision history

10 Jun 2021, Achim Berndzen

Added attribute 'queryBinding' to schematron's schema.

14 Sep 2019, Achim Berndzen

Changed test by replacing static variable with static option.

07 Sep 2019, Achim Berndzen

Fix test so it fails if there is no ex:p.

08 Jul 2019, Norman Walsh

Initial publication