質問: 初歩的なことで教えてください.仕様と言われればそれまでですが、表題の両者はなぜ違うのでしょう? パターンの`node()` > > node() matches any node other than an attribute node, namespace node, or document node. > > > ノードテストの`node()` > > node() matches any node. > > > これは次のようなスタイルシートで確認できます. [入力XML] ``` Document title The quick brown fox jumps over the lazy dog これは名前空間"http://my.com/namespace"に属した要素のテキストです ``` [スタイルシート] ``` ``` [出力テキスト] ``` 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 ノード種別:テキストノード テキスト: ``` 以上 よろしくお願いいたします.
回答: そもそも XSLT pattern に話を限る必要はないのでは?、ということです。 XPath の path expression でも `node()` は `child::node()` ですよね: 3.3.5 Abbreviated Syntax > > 2. If the axis name is omitted from an axis step, the default axis is child ... > > > あえて「XSLTの勧告」に話を限るとしても、pattern が XPath と異なる方向へ施す調整において、implicit な axis について結局上記を参照しているのでは: 5.5.3 The Meaning of a Pattern > > ... The adjustment depends on the axis used in this step, whether it appears explicitly or implicitly (according to the rules of Section 3.3.5 Abbreviated Syntax XP30) ... > > > もっとも、私のような一般人にとっては「勧告」はどうでもよくて、『XSLT 2.0 and XPath 2.0 Programmer's Reference』に * > > you might expect the pattern «node()» to match any node; but it doesn't. The equivalent expression, «//(node())» is short for «root(.)/descendant-or-self::node()/child::node()», and the only nodes that this can select are nodes that are children of something. > > > * > > «child::» (abbreviated to nothing: «») In general, if no PatternAxis is specified, the child axis is assumed > > > * > > the pattern «node()», which is short for «child::node()», will not match document nodes, attributes, or namespace nodes, because these nodes never appear as the child of another node. > > > * > > «node()» matches any node whatsoever (but remember that on its own, it means «child::node()» > > > * > > «node()», which is short for «child::node()», matches any node that is allowed to be the child of something (that is, an element node, text node, comment, or processing instruction). > > > などと何度もしつこく書いてあることのほうが重要に思えます :)