第3回([1])と前回([2])でパスには「式の構成部品としてのパス」(ロケーションパス)と「パターンの記述のためのパス」(パターンパス)の2種類あること、そしてロケーションパスは式の一部でありxsl:要素のselect属性で使われること。パターンパスは、match属性で使われることを説明しました。
パスを構成する文法を調べると、ステップがその基本的な単位になっています。パスはステップを’/’で結合して構成します。
そこで、ステップについてもう少し詳しく調べてみます。
1. ロケーションパスのステップは、XPath仕様[3]で決まっています。第3回でステップの文法の入り口として、次の項を紹介しました。
[4] Step ::= AxisSpecifier NodeTest Predicate* | AbbreviatedStep
ステップは軸の指定子(AxisSpecifier)とノードテスト(NodeTest)とオプション(*)の述部(Predicate)、または、省略形(AbbreviatedStep)から構成します。
ステップの省略形は ‘.’(自分自身、self::node()の省略形)、または’..’(親、parent::node()の省略形)です。
[12] AbbreviatedStep ::= ‘.’ | ‘..’
軸の指定子の定義は、次のようになっています。
[5] AxisSpecifier ::= AxisName ‘::’ | AbbreviatedAxisSpecifier
[6] AxisName ::= ‘ancestor’ | ‘ancestor-or-self’ | ‘attribute’ | ‘child’ | ‘descendant’ | ‘descendant-or-self’ | ‘following’ | ‘following-sibling’ | ‘namespace’ | ‘parent’ | ‘preceding’ | ‘preceding-sibling’ | ‘self’
軸の指定子は、軸の名前(AxisName)と’::’または省略形の軸指定子(AbbreviatedAxisSpecifier)で、軸の名前は’ancestor’から’self’まで13種類あります。
[13] AbbreviatedAxisSpecifier ::= ‘@’?
省略形の軸指定子はなにも指定しないか’@’です。なにも指定しないとデフォルトはchild::です。
@はattribute::の省略形です。その他、’//’は/descendant-or-self::node()/の省略形とされています(規則[11]省略)。
NodeTest以下は次のようになっていますが、次回以降もう少し詳しく調べてみます。
[7] NodeTest ::= NameTest | NodeType ‘(‘ ‘)’ | ‘processing-instruction’ ‘(‘ Literal ‘)’
[37] NameTest ::= ‘*’ | NCName ‘:’ ‘*’ | QName
[38] NodeType ::= ‘comment’ | ‘text’ | ‘processing-instruction’ | ‘node’
NCName、QNameはXML名前空間([4])で規定されています。
[8] Predicate ::= ‘[‘ PredicateExpr ‘]’
[9] PredicateExpr ::= Expr
述部は式(Expr)を'[‘ ‘]’で囲ったものです。
2. パターンの構成要素であるステップ(ステップパターン)は、XSLT仕様([5])で決まっています。その文法は次の通りです。
[5] StepPattern ::= ChildOrAttributeAxisSpecifier NodeTest Predicate*
[6] ChildOrAttributeAxisSpecifier ::= AbbreviatedAxisSpecifier
| (‘child’ | ‘attribute’) ‘::’
NodeTest、Predicate、AbbreviatedAxisSpecifierはXPathのステップを参照しています。XSLT仕様はXPath仕様を利用して作られていることがよく分かります。
[1] XSLTを学ぶ(3)パスとは
[2] XSLTを学ぶ(5)パターンの記述のためのパス
[3] XML Path Language (XPath) Version 1.0
[4] Namespaces in XML 1.0 (Third Edition)
[5] XSL Transformations (XSLT) Version 1.0
[6] 『スタイルシート開発の基礎』
【広告】★AH Formatter XML関連出版物の紹介
次回:
XSLTを学ぶ(7)ステップの文法を追求する-軸とは
前回:
XSLTを学ぶ(5)パターンの記述のためのパス
初回:
XSLTを学ぶ(1)XMLのツリーモデルとXPath/XSLTのツリーモデルではルートの意味が違う