パターンのnode()とノードテストのnode()の違い
初歩的なことで教えてください.仕様と言われればそれまでですが、表題の両者はなぜ違うのでしょう?
パターンのnode()
https://www.w3.org/TR/xslt-30/#patterns
node() matches any node other than an attribute node, namespace node, or document node.
ノードテストのnode()
https://www.w3.org/TR/xpath-31/#doc-xpath31-NodeTest
node() matches any node.
これは次のようなスタイルシートで確認できます.
[入力XML]
<?xml version="1.0" encoding="UTF-8"?>
<doc xmlns:my-prefix="http://my.com/namespace">
<title>Document title</title>
<chapter toc="yes">
<!-- これはコメントです-->
<?pi これは処理命令です. ?>
<p>The quick brown fox jumps over the lazy dog</p>
</chapter>
<my-prefix:h1>これは名前空間"http://my.com/namespace"に属した要素のテキストです</my-prefix:h1>
</doc>
[スタイルシート]
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="3.0">
<xsl:output method="text" encoding="UTF-8" byte-order-mark="yes"/>
<xsl:template match="node()|attribute()|document-node()|namespace-node()">
<xsl:if test="self::node()">
<xsl:value-of select="'generate-id:',generate-id(),'ともかくノードです!','
'"/>
</xsl:if>
<xsl:choose>
<xsl:when test="self::document-node()">
<xsl:value-of select="'generate-id:',generate-id(),'ノード種別:ドキュメントノード','
'"/>
</xsl:when>
<xsl:when test="self::element()">
<xsl:value-of select="'generate-id:',generate-id(),'ノード種別:要素ノード','要素名:',name(),'ネームスペースURI:',namespace-uri(),'
'"/>
</xsl:when>
<xsl:when test="self::attribute()">
<xsl:value-of select="'generate-id:',generate-id(),'ノード種別:属性ノード','属性名:',name(),'属性値:',string(.),'ネームスペースURI:',namespace-uri(),'
'"/>
</xsl:when>
<xsl:when test="self::text()">
<xsl:value-of select="'generate-id:',generate-id(),'ノード種別:テキストノード','テキスト:',string(.),'
'"/>
</xsl:when>
<xsl:when test="self::comment()">
<xsl:value-of select="'generate-id:',generate-id(),'ノード種別:コメントノード','コメント:',string(.),'
'"/>
</xsl:when>
<xsl:when test="self::processing-instruction()">
<xsl:value-of select="'generate-id:',generate-id(),'ノード種別:処理命令ノード','名前:',name(),'値',string(.),'
'"/>
</xsl:when>
<xsl:when test="self::namespace-node()">
<xsl:value-of select="'generate-id:',generate-id(),'ノード種別:ネームスペースノード','名前:',name(),'値',string(.),'
'"/>
</xsl:when>
</xsl:choose>
<xsl:apply-templates select="node()|attribute::node()|namespace::node()"/>
</xsl:template>
</xsl:stylesheet>
[出力テキスト]
generate-id: d1 ともかくノードです!
generate-id: d1 ノード種別:ドキュメントノード
generate-id: d1e1 ともかくノードです!
generate-id: d1e1 ノード種別:要素ノード 要素名: doc ネームスペースURI:
generate-id: d1e1n0 ともかくノードです!
generate-id: d1e1n0 ノード種別:ネームスペースノード 名前: my-prefix 値 http://my.com/namespace
generate-id: d1e1n1 ともかくノードです!
generate-id: d1e1n1 ノード種別:ネームスペースノード 名前: xml 値 http://www.w3.org/XML/1998/namespace
generate-id: d1t2 ともかくノードです!
generate-id: d1t2 ノード種別:テキストノード テキスト:
generate-id: d1e3 ともかくノードです!
generate-id: d1e3 ノード種別:要素ノード 要素名: title ネームスペースURI:
generate-id: d1e3n0 ともかくノードです!
generate-id: d1e3n0 ノード種別:ネームスペースノード 名前: my-prefix 値 http://my.com/namespace
generate-id: d1e3n1 ともかくノードです!
generate-id: d1e3n1 ノード種別:ネームスペースノード 名前: xml 値 http://www.w3.org/XML/1998/namespace
generate-id: d1t4 ともかくノードです!
generate-id: d1t4 ノード種別:テキストノード テキスト: Document title
generate-id: d1t5 ともかくノードです!
generate-id: d1t5 ノード種別:テキストノード テキスト:
generate-id: d1e6 ともかくノードです!
generate-id: d1e6 ノード種別:要素ノード 要素名: chapter ネームスペースURI:
generate-id: d1e6n0 ともかくノードです!
generate-id: d1e6n0 ノード種別:ネームスペースノード 名前: my-prefix 値 http://my.com/namespace
generate-id: d1e6n1 ともかくノードです!
generate-id: d1e6n1 ノード種別:ネームスペースノード 名前: xml 値 http://www.w3.org/XML/1998/namespace
generate-id: d1e6a1027 ともかくノードです!
generate-id: d1e6a1027 ノード種別:属性ノード 属性名: toc 属性値: yes ネームスペースURI:
generate-id: d1t7 ともかくノードです!
generate-id: d1t7 ノード種別:テキストノード テキスト:
generate-id: d1c8 ともかくノードです!
generate-id: d1c8 ノード種別:コメントノード コメント: これはコメントです
generate-id: d1t9 ともかくノードです!
generate-id: d1t9 ノード種別:テキストノード テキスト:
generate-id: d1p10 ともかくノードです!
generate-id: d1p10 ノード種別:処理命令ノード 名前: pi 値 これは処理命令です.
generate-id: d1t11 ともかくノードです!
generate-id: d1t11 ノード種別:テキストノード テキスト:
generate-id: d1e12 ともかくノードです!
generate-id: d1e12 ノード種別:要素ノード 要素名: p ネームスペースURI:
generate-id: d1e12n0 ともかくノードです!
generate-id: d1e12n0 ノード種別:ネームスペースノード 名前: my-prefix 値 http://my.com/namespace
generate-id: d1e12n1 ともかくノードです!
generate-id: d1e12n1 ノード種別:ネームスペースノード 名前: xml 値 http://www.w3.org/XML/1998/namespace
generate-id: d1t13 ともかくノードです!
generate-id: d1t13 ノード種別:テキストノード テキスト: The quick brown fox jumps over the lazy dog
generate-id: d1t14 ともかくノードです!
generate-id: d1t14 ノード種別:テキストノード テキスト:
generate-id: d1t15 ともかくノードです!
generate-id: d1t15 ノード種別:テキストノード テキスト:
generate-id: d1e16 ともかくノードです!
generate-id: d1e16 ノード種別:要素ノード 要素名: my-prefix:h1 ネームスペースURI: http://my.com/namespace
generate-id: d1e16n0 ともかくノードです!
generate-id: d1e16n0 ノード種別:ネームスペースノード 名前: my-prefix 値 http://my.com/namespace
generate-id: d1e16n1 ともかくノードです!
generate-id: d1e16n1 ノード種別:ネームスペースノード 名前: xml 値 http://www.w3.org/XML/1998/namespace
generate-id: d1t17 ともかくノードです!
generate-id: d1t17 ノード種別:テキストノード テキスト: これは名前空間"http://my.com/namespace"に属した要素のテキストです
generate-id: d1t18 ともかくノードです!
generate-id: d1t18 ノード種別:テキストノード テキスト:
以上 よろしくお願いいたします.