44404


以下は入力のXML文書から目次を作るために対象要素を変数（element()*）に格納したコードです．目次の対象は

  * 用語集
  * 索引
  * 章とその下の2階層のtopicref（DITAの場合）、section（DocBookの場合）

を示しています．

［DITAのコード］

[code]

    <xsl:variable name="tocCandidatesElem" as="element()*">
        <xsl:sequence select="$map/descendant::*[contains(@class,' bookmap/indexlist ')]"/>
        <xsl:sequence select="$map/descendant::*[contains(@class,' bookmap/glossarylist ')]"/>
        <xsl:for-each select="$map/descendant::*[contains(@class,' bookmap/chapter ') or contains(@class,' bookmap/appendix ')]">
            <xsl:variable name="topicRef" as="element()" select="."/>
            <xsl:sequence select="$topicRef/descendant-or-self::*[position() le 3]"/>
        </xsl:for-each>
    </xsl:variable>
    
[/code]

※ $mapはbookmapを指すものとお考えください．

［DocBookの場合］

[code]

    <xsl:variable name="tocCandidatesElem" as="element()*">
        <xsl:sequence select="/set/book[1]/glossary"/>
        <xsl:sequence select="/set/book[1]/index"/>
        <xsl:for-each select="/set/book[1]/chapter | /set/book[1]/appendix">
            <xsl:variable name="chapter" as="element()" select="."/>
            <xsl:sequence select="$chapter/>
            <xsl:sequence select="$chapter/descendant::section[position() le 2]"/>
        </xsl:for-each>
    </xsl:variable>
    
[/code]

※ DocBookは最近やっていないので怪しいかもしれません．

さて$tocCandidatesElemから実際に目次を作成したいのですが、このままでは索引、用語集、章、...の順となってしまい、文書の中に中に定義された順（ドキュメントオーダー）になっていません．

$tocCandidatesElemの中の定義順がどうあれ、ドキュメントオーダーになるような新しい変数を$tocCandidatesElemから作るにはどのようにしたらよいでしょうか？


CC BY-SA 4.0
2018-05-29T22:35:32.713
44381
2018-05-30T06:21:43.790
9503
question
xml xsl xslt
element()* にドキュメントオーダーを強制する


挙げている例がややこしすぎる（よく見ると単なる XPath におけるドキュメント オーダーの話のようなのに、なぜ DITA や DocBook
が出てくる必要があるのでしょうか…）上に、  
簡潔なインプット、求めるアウトプット、簡潔な再現コードのセットも書かれていないので、  
求めていることがすぐに分からないのですが、  
`<xsl:variable as="element()*" name="foo" select="$tocCandidatesElem/." />` とか
`<xsl:variable as="element()*" name="foo" select="$tocCandidatesElem | ()" />`
とかを求めているのでしょうか？


CC BY-SA 4.0
2018-05-30T06:21:43.790
44404
2018-05-30T06:21:43.790
27452
44381
answer