Home
Über mich
Veröffentlichungen

XML XML-Schema XPath XSL-T XSL-FO XQuery XProc SVG

XProc

XProc

XProc

➪ XProc bietet komfortable Möglichkeiten, ganze Konvertierungsstrecken bedingungsgesteuert zu definieren. Dabei können sowohl Validierungen gegenüber XML-Schema, RELAX NG, Schematron als auch Transformationen mithilfe von XSLT, XQuery o.a.m. zum Einsatz kommen.

Auf dieser Seite:

Siehe p:declare-step.

p:pipeline

Die p:pipeline bietet ein einfaches Beispiel für XProc.


<p:pipeline version="1.0" xmlns:p="http://www.w3.org/ns/xproc">
  <p:xslt>
    <p:input port="stylesheet">
      <p:inline>
        <xsl:stylesheet 
             xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
             version="1.0">
          <xsl:template match="/">
            <RESULTS>
              <xsl:for-each select="Orte/Ort">
                <result>
                  <xsl:value-of select="name"/>
                </result>
              </xsl:for-each>
            </RESULTS>
          </xsl:template>
        </xsl:stylesheet>
      </p:inline>
    </p:input>
    <p:input port="parameters">
      <p:empty/>
    </p:input>
  </p:xslt>
  <p:validate-with-xml-schema assert-valid="true">
    <p:log port="result" href="xproclog_xsd.txt"/>
    <p:input port="schema">
      <p:inline>
        <xs:schema 
            xmlns:xs="http://www.w3.org/2001/XMLSchema">
          <xs:element name="RESULTS">
            <xs:complexType>
              <xs:sequence>
                <xs:element ref="result" maxOccurs="unbounded"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="result" type="xs:string"/>
        </xs:schema>
      </p:inline>
    </p:input>
  </p:validate-with-xml-schema>  
  <p:validate-with-schematron assert-valid="false">
    <p:log port="result" href="xproclog_schematron.txt"/>
    <p:input port="schema">
      <p:inline>
        <sch:schema 
          xmlns:sch="http://purl.oclc.org/dsdl/schematron" 
          queryBinding="xslt2">
          <sch:pattern>
            <sch:rule context="/ergebnisse/ergebnis">
              <sch:assert 
                   test="matches(./text(), '[A-Z]{1}[a-z]{1,19}')">
                   Der Wert entspricht nicht dem Pattern
              </sch:assert>
              <sch:assert 
                   test="matches(./text(), 'stadt$')">
                   Der letzte Wortteil ist nicht 'stadt'
              </sch:assert>
            </sch:rule>
          </sch:pattern>
        </sch:schema>
      </p:inline>
    </p:input>
    <p:input port="parameters">
      <p:empty/>
    </p:input>
  </p:validate-with-schematron>
  <p:xslt>
    <p:input port="stylesheet">
      <p:inline>
        <xsl:stylesheet 
          xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
          version="1.0">          
          <xsl:template match="/">
            <ergebnisse>
              <xsl:for-each select="/RESULTS/result">
                <xsl:sort 
                     data-type="text" 
                     select="." 
                     order="ascending"/>
                <ergebnis 
                    nr="{position()}" 
                    content="{./text()}"/>
              </xsl:for-each>
            </ergebnisse>
          </xsl:template>
        </xsl:stylesheet>
      </p:inline>
    </p:input>
    <p:input port="parameters">
      <p:empty/>
    </p:input>
  </p:xslt>
  <p:validate-with-xml-schema assert-valid="true">
    <p:log port="result" href="xproclog_xsd2.txt"/>
    <p:input port="schema">
      <p:inline>
        <xs:schema 
            xmlns:xs="http://www.w3.org/2001/XMLSchema">
          <xs:element name="ergebnisse">
            <xs:complexType>
              <xs:sequence>
                <xs:element ref="ergebnis" maxOccurs="unbounded"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="ergebnis">
            <xs:complexType>
              <xs:attribute name="nr" type="xs:int"/>
              <xs:attribute name="content" type="xs:string"/>
            </xs:complexType>
          </xs:element>
        </xs:schema>
      </p:inline>
    </p:input>
  </p:validate-with-xml-schema>
</p:pipeline>

Nehmen Sie an, die vorstehende Datei steht in C:/xmlcalabash-1.1.30-99/xmlcalabash-1.1.30-99/wgtest/pipelinetest.xpl, der Input sei die Datei wgtest/Ort_Elemente.xml. Aufrufbar ist das Programm dann durch die Zeile


cd C:/xmlcalabash-1.1.30-99/xmlcalabash-1.1.30-99
java -jar xmlcalabash-1.1.30-99.jar 
     -i source=wgtest/Ort_Elemente.xml 
     -o result=wgtest/erg.xml 
     wgtest/pipelinetest.xpl

Prozessoraufrufe

Für die Transformationen ist ein Prozessor erforderlich. calabash ist eine XProc-Implementierung, die in der Regel den Saxon-HE-Prozessor mitbringt.

Damit sind diverse weitergehende Transformationen nur eingeschränkt durchführbar, zum Beispiel xsl:accumulator oder XSD-1.1-Schemavalidierung mit XSLT 3.0. Das gilt auch, wenn eine korrekte Lizensierung für Saxon-EE zwar vorhanden ist, calabash jedoch in ANT aufgerufen wird, das wiederum den Saxon-HE-Prozessor startet.

Hier bleibt nur, einen (i.d.R. kostenpflichtigen) Prozessor zu erwerben und diesen samt Lizensierung einzubinden.

wg / 16. Juni 2020



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.




XQuery

Sequenz transformieren und filtern

XProc: Mehrere Auswertungen

p:add-attribute

p:add-xml-base

p:archive

p:archive-manifest

p:cast-content-type

p:catch

p:choose

p:compare

p:compress

p:count

p:css-formatter

p:declare-step

p:delete

p:directory-list

p:document

p:documentation

p:empty

p:error

p:escape-markup

p:file-copy

p:file-create-tempfile

p:file-delete

p:file-info

p:file-mkdir

p:file-move

p:file-touch

p:filter

p:finally

p:for-each

XProc: p:for-each, p:choose, p:xslt, p:validate-with-xml-schema, p:validate-with-schematron

p:group

p:hash

p:http-request

p:identity

p:if

p:import

p:import-functions

p:inline

p:input

p:insert

p:json-join

p:json-merge

p:label-elements

p:library

p:load

p:make-absolute-uris

p:markdown-to-html

p:namespace-delete

p:namespace-rename

p:option

p:os-exec

p:os-info

p:otherwise

p:output

p:pack

p:pipe

p:pipeinfo

p:rename

p:replace

p:run

p:set-attributes

p:set-properties

p:sink

p:split-sequence

p:store

p:string-replace

p:text-count

p:text-head

p:text-join

p:text-replace

p:text-sort

p:text-tail

p:try

p:unarchive

p:uncompress

p:unescape-markup

p:unwrap

p:uuid

p:validate-with-nvdl

p:validate-with-relax-ng

p:validate-with-schematron

p:validate-with-xml-schema

p:variable

p:viewport

p:when

p:with-input

p:with-option

p:wrap

p:wrap-sequence

p:www-form-urldecode

p:www-form-urlencode

p:xinclude

p:xquery

p:xsl-formatter

p:xslt

SVG



Vielen Dank für Ihr Interesse an meiner Arbeit.



V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/XProc.html