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 is expected to pass.

Input: source

<doc xmlns="http://example.com/sample"
     xmlns:t="http://xproc.org/ns/testsuite/3.0">
   <title>Some Title</title>
   <p>A paragraph.</p>
   <note xml:id="note">
      <p>A paragraph in note.</p>
   </note>
</doc>

The pipeline

<p:declare-step xmlns:ex="http://example.com/sample"
                xmlns:p="http://www.w3.org/ns/xproc"
                xmlns:t="http://xproc.org/ns/testsuite/3.0"
                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>

Result

<doc xmlns="http://example.com/sample"
     xmlns:t="http://xproc.org/ns/testsuite/3.0">
   <title>Some Title</title>
   <p v="true">A paragraph.</p>
   <note xml:id="note">
      <p v="true">A paragraph in note.</p>
   </note>
</doc>

Schematron checks

<s:schema xmlns="http://www.w3.org/1999/xhtml"
          xmlns:s="http://purl.oclc.org/dsdl/schematron" xmlns:t="http://xproc.org/ns/testsuite/3.0"
          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