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 umschliessende Elemente in das Dokument einzubinden. So wird durch einen XSLT Ausdruck (in der Option “match“) das zu umschliessende 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 Prefix 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 andressiert, wird der Prozessor angewiesen sämtliche nah beinander liegende “Genre“ Elemente in einem Wrapper zu vereinen.