XProc-Steps

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

p:wrap

<p:declare-step type="p:wrap">
   <p:input port="source"/>
   <p:output port="result"/>
   <p:option name="wrapper" required="true"/> <!-- QName -->
   <p:option name="wrapper-prefix"/> <!-- NCName -->
   <p:option name="wrapper-namespace"/> <!-- anyURI -->
   <p:option name="match" required="true"/> <!-- XSLTMatchPattern -->
   <p:option name="group-adjacent"/> <!-- XPathExpression -->
</p:declare-step>

Der Step <p:wrap> gibt dem Benutzer die Möglichkeit, neue umschließende Elemente in das Dokument einzubinden. So wird durch einen XSLT-Ausdruck (in der Option “match“) das zu umschließende Ziel definiert. Innerhalb der Option “wrapper“ wird der neue Name für das Element angegeben. Weiterhin kann dem neuen Element mit den optionalen Optionen “wrapper-prefix“ und “wrapper-namespace“ ein Präfix und ein Namensraum zugewiesen werden. Durch die Option “group-adjacent“ kann festgelegt werden, dass Elemente, die direkt beisammen liegen und zu dem von der Option verlangten XPath-Ausdruck passen, in das neue Wrapper-Element mit gruppiert werden. Das Quell-Dokument wird am Input-Port (“source“) geladen. Das Resultat wird auf den Output-Port (“result“) geschrieben.

Beispiel

Im folgenden Beispiel sollen sämtliche “Genre“-Elemente mit einem neuen Element “GenreInfos“ umschlossen werden.

<?xml version="1.0" encoding="UTF-8"?>
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step" version="1.0">
   <p:input port="source">
      <p:document href="filmsammlung.xml"/>
   </p:input>
   <p:output port="result"/>
      <p:wrap wrapper="MyWrap" match="/FilmSammlung/Film/Genre"/>
</p:declare-step>

Nach dem Durchführen dieses Prozesses würde das Resultat folgendermaßen aussehen (Auszug):

<MyWrap>
   <Genre>SciFi</Genre>
</MyWrap> 
<MyWrap>
   <Genre>Abenteuer</Genre>
</MyWrap> 
   <Regisseur>George Lucas</Regisseur>

Das initiale Dokument hat für den aktuell betrachteten Film zwei “Genre“-Einträge hinterlegt. Nach der aktuellen Einstellung bekommt jedes “Genre“-Element einen eigenen Wrapper zugewiesen. Um die “Genre“-Einträge in einen einzigen Wrapper einzutragen, wird das XProc-Stylesheet erweitert:

<?xml version="1.0" encoding="UTF-8"?>
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step" version="1.0">
   <p:input port="source">
      <p:document href="filmsammlung.xml"/>
   </p:input>
   <p:output port="result"/>
   <p:wrap wrapper="MyWrap" match="/FilmSammlung/Film/Genre" group-adjacent="/FilmSammlung/Film/Genre"/>
</p:declare-step>

Das Resultat sieht nun so aus:

<MyWrap>
   <Genre>SciFi</Genre>
   <Genre>Abenteuer</Genre>
</MyWrap> 
   <Regisseur>George Lucas</Regisseur>

Durch die Angabe eines XPath-Ausdrucks für die Option “group-adjacent“, die die besagten “Genre“-Elemente zusätzlich adressiert, wird der Prozessor angewiesen, sämtliche nah beieinanderliegende “Genre“-Elemente in einem Wrapper zu vereinen.

Tipp der data2type-Redaktion:
Zum Thema XProc bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: