XML | XML-Schema | XPath | XSL-T | XSL-FO | XQuery | XProc | SVG |
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.
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
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
ᐁ p:catch
ᐁ p:choose
ᐁ p:count
ᐁ p:delete
ᐁ p:empty
ᐁ p:error
ᐁ p:filter
ᐁ XProc: p:for-each, p:choose, p:xslt, p:validate-with-xml-schema, p:validate-with-schematron
ᐁ p:group
ᐁ p:hash
ᐁ p:if
ᐁ p:import
ᐁ p:inline
ᐁ p:input
ᐁ p:insert
ᐁ p:load
ᐁ p:option
ᐁ p:output
ᐁ p:pack
ᐁ p:pipe
ᐁ p:rename
ᐁ p:run
ᐁ p:sink
ᐁ p:store
ᐁ p:try
ᐁ p:unwrap
ᐁ p:uuid
ᐁ p:when
ᐁ p:wrap
ᐁ p:xquery
ᐁ p:xslt
ᐅ SVG
V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn
☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de