- From: Costello, Roger L. <costello@mitre.org>
- Date: Sat, 18 Apr 2009 18:44:31 -0400
- To: "'xproc-dev@w3.org'" <xproc-dev@w3.org>
- CC: "'rjelliffe@allette.com.au'" <rjelliffe@allette.com.au>
Hi Folks, I am trying to use Schematron phases with p:validate-with-schematron. Below is my Schematron schema. It has two phases: 1. classificationValidation 2. reservedWordValidation Here's the XProc for invoking the first phase: <p:validate-with-schematron phase="classificationValidation" name="schValidation"> <p:input port="schema"> <p:document href="check-classifications-and-reserved-words.sch"/> </p:input> <p:input port="parameters"> <p:empty/> </p:input> </p:validate-with-schematron> Unfortunately, when I run my .xpl file I get this message: Warning: unrecognized element sch:schema What am I doing wrong please? By the way, what's the purpose of: <p:input port="parameters"> <p:empty/> </p:input> I've empirically discovered that without it, p:validate-with-schematron doesn't work, but I have no idea of its purpose. The specification doesn't seem to mention this port. (Nor does it mention phases) Here's my Schematron schema (check-classifications-and-reserved-words.sch): ---------------------------------------------------------- <?xml version="1.0"?> <sch:schema xmlns:sch="http://www.ascc.net/xml/schematron"> <sch:phase id="classificationValidation"> <sch:p>Validate that the document's security classification policy is valid.</sch:p> <sch:active pattern="SCP" /> </sch:phase> <sch:phase id="reservedWordValidation"> <sch:p>Validate that the document doesn't contain any reserved words.</sch:p> <sch:active pattern="RWF" /> </sch:phase> <sch:pattern name="Security Classification Policy" id="SCP"> <sch:p>A Para's classification value cannot be more sensitive than the Document's classification value.</sch:p> <sch:rule context="Para[@classification='top-secret']"> <sch:assert test="/Document/@classification='top-secret'"> If there is a Para is labeled "top-secret" then the Document should be labeled top-secret </sch:assert> </sch:rule> <sch:rule context="Para[@classification='secret']"> <sch:assert test="(/Document/@classification='top-secret') or (/Document/@classification='secret')"> If there is a Para is labeled "secret" then the Document should be labeled either secret or top-secret </sch:assert> </sch:rule> <sch:rule context="Para[@classification='confidential']"> <sch:assert test="(/Document/@classification='top-secret') or (/Document/@classification='secret') or (/Document/@classification='confidential')"> If there is a Para is labeled "confidential" then the Document should be labeled either confidential, secret or top-secret </sch:assert> </sch:rule> </sch:pattern> <sch:pattern name="Reserved Word Filter" id="RWF"> <sch:p>These reserved words are not allowed anywhere in the document: SCRIPT, FUNCTION.</sch:p> <sch:rule context="Document"> <sch:assert test="count(//node()[contains(.,'SCRIPT')]) = 0 and count(//node()[contains(.,'FUNCTION')]) = 0"> The document must not contain the words SCRIPT or FUNCTION </sch:assert> </sch:rule> </sch:pattern> </sch:schema> ---------------------------------------------------------- Here's my .xpl file: ---------------------------------------------------------- <p:declare-step xmlns:p="http://www.w3.org/ns/xproc"> <p:input port="source"> <p:document href="document.xml"/> </p:input> <p:output port="result"> <p:pipe step="schValidation" port="result"/> </p:output> <p:validate-with-schematron phase="classificationValidation" name="schValidation"> <p:input port="schema"> <p:document href="check-classifications-and-reserved-words.sch"/> </p:input> <p:input port="parameters"> <p:empty/> </p:input> </p:validate-with-schematron> </p:declare-step> ---------------------------------------------------------- Thanks. /Roger
Received on Saturday, 18 April 2009 22:55:34 UTC