サイトトップへこのカテゴリの一覧へ

X 4160:2007  

(1) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

目 次 

ページ 

序文 ··································································································································· 1 

0 適用範囲 ························································································································· 1 

1 導入······························································································································· 1 

2 位置パス ························································································································· 3 

2.1 位置ステップ ················································································································ 5 

2.2 軸 ······························································································································· 6 

2.3 ノード試験 ··················································································································· 7 

2.4 述部 ···························································································································· 8 

2.5 短縮構文 ······················································································································ 8 

3 式································································································································· 10 

3.1 基本 ··························································································································· 10 

3.2 関数呼出し ·················································································································· 10 

3.3 ノード集合型 ··············································································································· 11 

3.4 論理型 ························································································································ 12 

3.5 数値型 ························································································································ 13 

3.6 文字列型 ····················································································································· 14 

3.7 字句構造 ····················································································································· 15 

4 主要関数ライブラリ ········································································································· 16 

4.1 ノード集合関数 ············································································································ 16 

4.2 文字列型関数 ··············································································································· 17 

4.3 論理型関数 ·················································································································· 20 

4.4 数値型関数 ·················································································································· 20 

5 データモデル ·················································································································· 21 

5.1 ルートノード ··············································································································· 22 

5.2 要素ノード ·················································································································· 22 

5.3 属性ノード ·················································································································· 23 

5.4 名前空間ノード ············································································································ 24 

5.5 処理命令ノード ············································································································ 24 

5.6 コメントノード ············································································································ 24 

5.7 テキストノード ············································································································ 24 

6 適合性··························································································································· 25 

附属書A(規定)文献 ·········································································································· 26 

附属書B(参考)XML情報集合との対応付け ··········································································· 28 

X 4160:2007  

(2) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

まえがき 

この規格は,工業標準化法第12条第1項の規定に基づき,財団法人日本規格協会(JSA)から,工業標準

原案を具して日本工業規格を制定すべきとの申出があり,日本工業標準調査会の審議を経て,経済産業大

臣が制定した日本工業規格である。 

この規格は,著作権法で保護対象となっている著作物である。 

この規格の一部が,特許権,出願公開後の特許出願,実用新案権又は出願公開後の実用新案登録出願に

抵触する可能性があることに注意を喚起する。経済産業大臣及び日本工業標準調査会は,このような特許

権,出願公開後の特許出願,実用新案権又は出願公開後の実用新案登録出願に係る確認について,責任は

もたない。 

原勧告の標題及びまえがきの翻訳 

XMLパス言語(XPath)1.0 

W3C勧告 1999年11月16日 

この版の掲載場所 

http://www.w3.org/TR/1999/REC-xpath-19991116  

(XML又はHTMLで入手可能。) 

最新版の掲載場所 

http://www.w3.org/TR/xpath 

以前の版の掲載場所 

http://www.w3.org/TR/1999/PR-xpath-19991008  

http://www.w3.org/1999/08/WD-xpath-19990813  

http://www.w3.org/1999/07/WD-xpath-19990709  

http://www.w3.org/TR/1999/WD-xslt-19990421  

編者 

James Clark <jjc@jclark.com>  

Steve DeRose (Inso Corp. and Brown University) <Steven̲DeRose@Brown.edu>  

著作権 © 1999 W3C®(MIT,INRIA,慶應義塾)が,すべての権利を保有する。免責,商標,文書の使

用及びソフトウェアの使用許諾に関するW3Cの規則を適用する。 

要約  

この勧告は,XML文書の部分を番地付けするための言語であるXPathを規定する。XPathは,XSLT及

びXPointerの両者によって用いられるように設計されている。 

X 4160:2007  

(3) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

この文書の状態  

この文書は,W3Cの勧告である。この勧告は,W3C会員企業及び関連する団体によって閲読されてお

り,技術統括責任者によってW3C勧告として承認されている。これは安定した文書であり,参考資料と

して使用してよく,他の文書から引用規定として引用してもよい。W3Cはこの勧告を制定することによっ

て,この規定への注目を喚起し,広い普及を促進するという役割を果たす。この結果,Webの機能及び相

互運用性が高まる。 

この勧告についての正誤表は,http://www.w3.org/1999/11/REC-xpath-19991116-errataから入手できる。 

この勧告についてのコメントは,www-xpath-comments@w3.org に報告されたい。コメントの一覧が,入

手できる。 

この勧告の英語版だけを規定としての版とする。しかし,翻訳については, 

http://www.w3.org/Style/XSL/translations.htmlを参照されたい。 

現在のW3C勧告及び他の技術文書の一覧は,http://www.w3.org/TR/で見ることができる。 

この勧告は,XSL作業グループ及びXMLリンク付け作業グループの共同作業であって,W3C Style及

びW3C XMLの活動の一部である。 

X 4160:2007  

(4) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

白   紙 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

日本工業規格          JIS 

X 4160:2007 

XMLパス言語(XPath)1.0 

XML Path Language (XPath)  Version 1.0 

序文 

この規格は,1999年11月にWorld Wide Web Consortium (W3C)から公表されたXML Path Language (XPath) 

Version 1.0 勧告を翻訳し,その後に発行された正誤表を取り込んで,技術的内容を変更することなく作成

した日本工業規格である。 

なお,この規格で点線の下線を施してある箇所は,原勧告にはない事項である。 

適用範囲 

この規格は,XML文書の部分を番地付けするための言語であるXPathを規定する。XPathは,XSLT及

びXPointerの両者によって用いられる。 

導入 

XPathは,XSL変換(JIS X 4169で定義する。以下XSLTともいう。)及びXPointer[XPointer]で共有する

機能に関し,共通の構文及び意味を提供する活動によって開発した。XPathの主要な目的は,XML (JIS X 

4159)文書の部分を番地付けすることにある。この主要な目的を支援するために,XPathは,文字列型,数

値型及び論理値型を扱うための基本的な機能をも提供する。XPathは,URIの中及びXMLの属性値の中で

XPathを利用しやすくするために,簡潔であってXMLではない構文を用いる。XPathは,XML文書の見

た目の構文ではなく,XML文書の抽象的で論理的な構造を操作する。XPathは,XML文書の階層構造を

たどるために,URLと同じように,パス(経路)記法を利用することから,その名が付いている。  

注記 原勧告では,外部文書への参照は,[XPointer]などといった記述から参照箇所にリンクされてい

る。ただし,この規格では参照箇所へのリンクは記載しない。代わりに,この記法によって,

附属書Aの対応する項目を参照する。 

番地付けのためのXPathの使用に加えて,XPathは,一致をとる(すなわち,ノードがパターンに一致

するかどうかを試験する。)ために使用できる自然なサブセットをもつことも目指して設計されている。

XPathのこの使用法は,XSLT(の規定)において示される。 

XPathは,XML文書をノード木としてモデル化する。要素ノード,属性ノード及びテキストノードを含

む様々なノードの型がある。XPathは,ノードの各型に関して文字列値を計算する方法を定義する。名前

をもつノードの型もある。XPathは,XML名前空間(JIS X 4158)を完全に提供する。したがって,ノード

の名前は,局所部分と,ヌルになることもある名前空間URIとから成る対としてモデル化される。これは

展開名と呼ばれる。データモデルは,箇条5において詳細に示す。 

XPathにおける主要な構文構成子は,式とする。式は,生成規則Exprに一致する。式は,評価されてオ

ブジェクトを生じる。このオブジェクトは,次の四つの基本的な型の一つをもつ。 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

a) ノード集合型(ノードの重複のない順序なし集合) 

b) 論理型(真又は偽) 

c) 数値型(浮動小数点数) 

d) 文字列型(UCS文字の列。[ISO/IEC 10646]参照。) 

式の評価は,文脈に関して行われる。XSLT及びXpointerの規定は,それぞれXSLT及びXPointerで用

いるXPath式について,文脈をどのように決定するかを示す。文脈は,次のもので構成する。  

a) ノード(文脈ノード) 

b) 0でない正の整数の対(文脈位置及び文脈サイズ) 

c) 変数束縛の集合 

d) 関数ライブラリ 

e) その式の有効範囲内にある名前空間宣言の集合 

文脈位置は,常に文脈サイズ以下とする。 

変数束縛は,変数名から変数値への対応付けから成る。変数の値は,オブジェクトであって,式の値と

して可能な任意の型をもつことができ,この規格に規定していない追加の型であってもよい。 

関数ライブラリは,関数名から関数への対応付けから成る。各関数は,0個以上の引数をとり,単一の

結果を返す。この規格は,すべてのXPath実装が提供しなければならない主要関数ライブラリ(箇条4参

照)を定義する。主要関数ライブラリの関数について,引数及び結果は,四つの基本的な型のいずれかを

もつ。XSLT及びXPointerのどちらも,追加の関数を定義することによって,XPathを拡張する。これら

の関数の幾つかは,四つの基本的な型を操作し,他の関数はXSLT及びXPointerが定義する追加のデータ

型を操作する。 

名前空間宣言は,接頭辞から名前空間URIへの対応から成る。 

部分式を評価するのに使う変数束縛,関数ライブラリ及び名前空間宣言は,部分式を含む式を評価する

のに使うものと常に同じとする。部分式を評価するのに使う文脈ノード,文脈位置及び文脈サイズは,部

分式を含む式を評価するのに使うものとは異なることがある。幾つかの種類の式は, 文脈ノードを変更す

る。述部だけが,文脈位置及び文脈サイズを変更する(2.4参照)。ある種類の式の評価が記述される場合, 

部分式の評価で文脈ノード,文脈位置及び文脈サイズが変わるとき,それは常に明示的に示される。文脈

ノード,文脈位置及び文脈サイズについて何も示していない場合,その種類の式の部分式の評価では,こ

れらは変更されない。 

XPath式は,XMLの属性の中に現われることが多い。この規格で規定する文法は,XML 1.0の正規化の

後の属性値に適用する。したがって,例えば,文法が文字“<”を用いるとき,これはXMLソースの中で

“<”として現れてはならず,例えば &lt; としてそれを入れることによって,XML 1.0の規則に従って引

用されなければならない。式の中では,リテラル列は一重引用符又は二重引用符によって区切られるが,

それらは,XMLの属性を区切るのにも使われる。式の中の引用符が,属性値を終端しているとXMLプロ

セサによって解釈されることを避けるために,引用符は,文字参照(&quot; 又は &apos;)として入れる

ことができる。これに代えて,XMLの属性が二重引用符で区切られているときには,式は一重引用符を使

うことができ,その逆もできる。 

重要な種類の式の一つに,位置パスがある。位置パスは,文脈ノードに対して相対的に,ノードの集合

を選ぶ。位置パスになっている式を評価した結果は,その位置パスによって選ばれるノードを含むノード

集合とする。位置パスは,ノードの集合をフィルタリングするのに使われる式を再帰的に含むことができ

る。位置パスは,生成規則LocationPathに一致する。 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

以下の文法において,非終端記号のQName及びNCNameは,JIS X 4158で定義し,Sは,JIS X 4159

で定義される。文法は,JIS X 4159と同じEBNF記法を用いる。ただし,文法の記号は,常に先頭に大文

字をもつことを除く。  

式は,まず解析対象の文字列をトークンに分割し,それから結果のトークン列を解析することによって,

構文解析される。トークンの間には空白を自由に使うことができる。トークン化処理は,3.7に示す。 

なお,便宜上,JIS X 4159及びJIS X 4158,すなわち,XML 1.0及びXML Names 1.0への参照を常に使

用する。しかし,実装は,JIS X 4159及びJIS X 4158の字句規定,又は[XML 1.1]及び[XML Names 1.1]の

字句規定の採用を選択してよい。したがって,同様に,URIへの参照が常に使用されるが,IRIを提供し

てもよい。XML 1.0及びXML 1.1の定義が,全く同じ場合もある。 

位置パス 

位置パスは,XPath言語の中で最も一般的な文法的構成子ではない(LocationPathは,Exprの特別な場

合である。)が,最も重要な構成子なので,最初にそれを示す。 

位置パスはどれも,直接的ではあるが少しばかり面倒な構文を使って表現できる。共通の場合を簡潔に

表現できる多くの構文的短縮形もある。箇条2は,非短縮構文を使って,位置パスの意味を説明する。そ

の後で,短縮構文を,それがどのように非短縮構文に展開されるかを示すことによって規定する(2.5参照)。 

次に,非短縮構文を使った位置パスの例を示す。 

例  

a) child::paraは,文脈ノードの子要素paraを選択する。 

b) child::*は,文脈ノードの子要素のすべてを選択する。  

c) child::text()は,文脈ノードの子テキストノードのすべてを選択する。  

d) child::node()は,文脈ノードの子のすべてを,ノード型を問わずに選択する。  

e) attribute::nameは,文脈ノードのname属性を選択する。  

f) 

attribute::*は,文脈ノードのすべての属性を選択する。  

g) descendant::paraは,文脈ノードの子孫要素paraを選択する。  

h) ancestor::divは,文脈ノードの祖先divのすべてを選択する。  

i) 

ancestor-or-self::divは,文脈ノードの祖先divを選択し,文脈ノードがdiv要素である場合には,

その文脈ノードも選択する。 

j) 

descendant-or-self::paraは,文脈ノードの子孫要素paraを選択し,文脈ノードがpara要素である

場合には,その文脈ノードも選択する。 

k) self::paraは,文脈ノードがpara要素である場合にはその文脈ノードを選択し,そうでない場合

には何も選択しない。 

l) 

child::chapter/descendant::paraは,文脈ノードの子要素chapterの子孫要素paraを選択する。 

m) child::*/child::paraは,文脈ノードの孫paraのすべてを選択する。 

n) / は,文書のルート(常に文書要素の親)を選択する。 

o) /descendant::paraは,文脈ノードと同じ文書にあるpara要素のすべてを選択する。 

p) /descendant::olist/child::itemは,親olistをもち,文脈ノードと同じ文書にあるitem要素のすべて

を選択する。 

q) child::para[position()=1]は,文脈ノードの子の中の最初paraを選択する。 

注記 以下では,これを“最初の子para”などという。  

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

r) child::para[position()=last()]は,文脈ノードの最後の子paraを選択する。 

s) 

child::para[position()=last()-1]は,文脈ノードの最後から2番目の子paraを選択する。 

t) 

child::para[position()>1]は,文脈ノードの最初の子paraを除き,文脈ノードの子paraのすべてを

選択する。 

u) following-sibling::chapter[position()=1]は,文脈ノードの次の兄弟chapterを選択する。 

v) preceding-sibling::chapter[position()=1]は,文脈ノードの前の兄弟chapterを選択する。 

w) /descendant::figure[position()=42]は,文書中の42番目のfigure要素を選択する。 

x) /child::doc/child::chapter[position()=5]/child::section[position()=2]は,doc文書要素の5番目の 

chapterの2番目のsectionを選択する。 

y) child::para[attribute::type="warning"]は,値がwarningであるtype属性をもつ,文脈ノードの子

paraのすべてを選択する。 

z) child::para[attribute::type='warning'][position()=5]は,値がwarningのtype属性をもつ,文脈ノード

の5番目の子paraを選択する。 

aa) child::para[position()=5][attribute::type="warning"]は,文脈ノードの5番目の子paraを,それが値

warningをとるtype属性をもつ場合に,選択する。 

ab) child::chapter[child::title='Introduction']は,文脈ノードの子chapterで,文字列値(箇条5参照)

がIntroductionに等しい1個以上の子titleをもつものを選択する。 

ac) child::chapter[child::title]は,文脈ノードの子chapterで,1個以上の子titleをもつものを選択す

る。 

ad) child::*[self::chapter or self::appendix]は,文脈ノードの子chapter及びappendixを選択する。  

ae) child::*[self::chapter or self::appendix][position()=last()]は,文脈ノードの最後の子chapter又は

appendixを選択する。  

位置パスには,相対位置パス及び絶対位置パスの2種類がある。  

相対位置パスは,“/” で分離された1個以上の位置パスの列から成る。相対位置パスの中のステップは,

左から右へ一つに構成される。各ステップは順次,文脈ノードに対して相対的にノードの集合を選択する。

ステップの初期列は,次のとおりに後続ステップとともに一つに構成される。ステップの初期列は,文脈

ノードに対して相対的にノードの集合を選択する。その集合の各ノードは,次のステップの文脈ノードと

して使う。そのステップによって特定されるノードの集合は,一つに統合される。ステップの構成によっ

て特定されるノードの集合は,統合されて一つになる。例えば,child::div/child::paraは,文脈ノードの子

要素divの子要素paraを選択する。言い換えると,親divをもつ孫要素paraを選択する。  

絶対位置パスは,“/” から成り,任意選択で相対位置パスが後続する。“/” はそれ自体で,文脈ノー

ドを含む文書のルートノードを選択する。その後に相対位置パスが続く場合には,その位置パスは,文脈

ノードを含む文書のルートノードに対して相対的な相対位置パスによって選択することになるノードの集

合を選択する。 

位置パスの構文を次に示す。 

[1] 

LocationPath 

::= RelativeLocationPath 

| AbsoluteLocationPath 

[2] 

AbsoluteLocationPath 

::= '/' RelativeLocationPath? 

| AbbreviatedAbsoluteLocationPath 

[3]  

RelativeLocationPath 

::= Step 

background image

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

| RelativeLocationPath '/' Step 

    

 | AbbreviatedRelativeLocationPath 

注記 構文規則内の構成子は,(存在する場合には)本文中の次の日本語と対応する。 

LocationPath 

位置パス 

RelativeLocationPath 

相対位置パス 

AbsoluteLocationPath 

絶対位置パス 

AbbreviatedAbsoluteLocationPath 

短縮絶対位置パス 

Step  

ステップ,位置ステップ 

AbbreviatedRelativeLocationPath 

短縮相対位置パス 

2.1 

位置ステップ 

位置ステップは,次の三つの部分をもつ。 

a) 位置ステップによって選択されるノードと文脈ノードとの木関係を指定する軸。 

b) 位置ステップによって選択されるノードのノード型及び展開名(箇条5参照)を指定するノード試験。  

c) 位置ステップによって選択されるノードの集合を更に洗練するために,任意の式を用いる0個以上の

述部。 

位置ステップの構文は,二重コロンによって分けられた軸の名前及びノード試験であり,それぞれ角括

弧でくくられた0個以上の式が続く。例えばchild::para[position()=1]では,childが軸の名前,paraがノード

試験,[position()=1]が述部になる。 

位置ステップによって選択されるノード集合は,軸及びノード試験から初期ノード集合を生成し,その

後にそのノード集合を述部のそれぞれによって順次フィルタリングした結果のノード集合とする。  

初期ノード集合は,軸によって指定される文脈ノードとの関係をもち,ノード試験によって指定するノ

ード型及び展開名(箇条5参照)をもつノードから成る。例えば,位置ステップdescendant::paraは,文脈

ノードの子孫要素paraを選択する。ここでdescendantは,初期ノード集合にある各ノードが文脈の子孫で

なければならないことを指定し,paraは,初期ノード集合にある各ノードがparaと名付けられる要素でな

ければならないことを指定する。利用可能な軸は,2.2で示す。利用可能なノード試験は,2.3で示す。ノ

ード試験には,その意味が軸に依存するものがある。  

初期ノード集合は,最初の述部によってフィルタリングされて,新しいノード集合を生成する。その後

この新しいノード集合は,2番目の述部を使ってフィルタリングされ,以降同様とする。最終ノード集合

は,位置ステップが選択するノード集合になる。軸は,各述部の式がどのように評価されるかに影響を与

えるので,述部の意味は,軸に関して定義される(2.4参照)。  

位置ステップの構文を次に示す。 

[4]  

Step 

::= AxisSpecifier NodeTest Predicate* 

| AbbreviatedStep 

[5] 

AxisSpecifier 

::= AxisName '::' 

| AbbreviatedAxisSpecifier 

注記 構文規則内の構成子は,(存在する場合には)本文中の次の日本語と対応する。 

Step  

ステップ,位置ステップ 

AxisSpecifier 

軸,軸指定子 

NodeTest 

ノード試験 

Predicate 

述部 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

AbbreviatedStep  

短縮ステップ,短縮位置ステップ 

AxisName 

軸名 

AbbreviatedAxisSpecifier  

短縮軸,短縮軸指定子 

2.2 

軸 

次に示す軸が利用できる。 

a) child軸は,文脈ノードの子を含む。 

b) descendant軸は,文脈ノードの子孫を含む。子孫とは,子,子の子,子の子の子など,以降同様とす

る。そのため,descendant軸が属性ノード又は名前空間ノードを含むことは決してない。 

c) parent軸は,文脈ノードの親(箇条5参照)が存在する場合,それを含む。 

d) ancestor軸は,文脈ノードの祖先を含む。文脈ノードの祖先とは,文脈ノードの親,親の親,親の親

の親など,以降同様とする。そのため,ancestor軸は,文脈ノードがルートノードでない場合には,

常にルートノードを含む。 

e) following-sibling軸は,文脈ノードのすべての後続する兄弟を含む。文脈ノードが属性ノード又は名前

空間ノードの場合,following-sibling軸は空とする。 

f) 

preceding-sibling軸は,文脈ノードのすべての先行する兄弟を含む。文脈ノードが属性ノード又は名前

空間ノードの場合,preceding-sibling軸は空とする。 

g) following軸は,文書順で文脈ノードの後にある,文脈ノードと同じ文書の中のすべてのノードを含む。

ただし,すべての子孫を除き,属性ノード及び名前空間ノードを除く。 

h) preceding軸は,文書順で文脈ノードの前にある,文脈ノードと同じ文書の中のすべてのノードを含む。

ただし,すべての祖先を除き,属性ノード及び名前空間ノードを除く。 

i) 

attribute軸は,文脈ノードの属性を含む。文脈ノードが要素でない場合には,軸は空になる。 

j) 

namespace 軸は,文脈ノードの名前空間ノードを含む。文脈ノードが要素でない場合には,軸は空に

なる。 

k) self軸は,(現在の)文脈ノードそれ自体だけを含む。 

l) 

descendant-or-self軸は,文脈ノード及び文脈ノードの子孫を含む。 

m) ancestor-or-self軸は,文脈ノード及び文脈ノードの祖先を含む。したがって,ancestor-or-self軸は,常

にルートノードを含む。 

注記 ancestor, descendant, following, preceding及びselfの軸は,(属性ノード及び名前空間ノードを

無視して)文書を区分する。これらは重なり合うことはなく,一緒になって文書中のすべて

のノードを含む。 

軸の構文を次に示す。 

[6] 

AxisName 

::= 'ancestor' 

| 'ancestor-or-self' 

| 'attribute' 

| 'child' 

| 'descendant'   

| 'descendant-or-self'   

| 'following'   

| 'following-sibling'   

| 'namespace'   

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

| 'parent'   

| 'preceding'   

| 'preceding-sibling'   

| 'self'   

注記 構文規則内の構成子は,(存在する場合には)本文中の次の日本語と対応する。 

AxisName 

軸名 

2.3 

ノード試験 

どの軸にも主ノード型がある。軸が要素を含むことができる場合,主ノード型は要素とする。そうでは

ない場合,軸が含むことができるノードの型とする。したがって,次のとおりとなる。 

a) attribute軸については,主ノード型は,attributeとする。 

b) namespace軸については,主ノード型は,namespaceとする。 

c) その他の軸については,主ノード型は,elementとする。 

QNameであるノード試験が真であるのは,ノードの型(箇条5参照)が,主ノード型であって,QName

によって指定される展開名に等しい展開名をもつ場合に限る。例えば,child::paraは,文脈ノードの子要

素paraを選択する。文脈ノードが子要素paraをもたない場合は,ノードの空集合を選択することになる。

attribute::hrefは,文脈ノードのhref属性を選択する。文脈ノードがhref属性をもたない場合は,ノードの

空集合を選択することになる。  

ノード試験の中のQNameは,式の文脈からの名前空間宣言を使って展開名に展開される。これは,xmlns

で宣言される既定の名前空間が使われないことを除いて,開始タグ及び終了タグにおける要素型名につい

て展開がなされるのと同じ方法とする。QNameが接頭辞をもたないとき,名前空間URIはヌルとする。

これは属性名が展開されるのと同じ方法とする。QNameが,式の文脈の中で名前空間宣言のない接頭辞を

とる場合には,誤りとする。 

ノード試験 * は,主ノード型のどのノードについても真とする。例えば,child::*は文脈ノードのすべ

ての子要素を選択することになり,attribute::*は文脈ノードのすべての属性を選択することになる。  

ノード試験は,NCName:*という形式をもつことができる。この場合,接頭辞は,QNameをもつ場合と

同じ方法で,文脈名前空間宣言を使って展開される。式の文脈の中の接頭辞について,名前空間宣言がな

い場合には,誤りとする。ノード試験は,名前の局所部分とは無関係に,展開名が接頭辞の展開先の名前

空間URIをもつ主要な型のどのノードについても真になる。  

ノード試験text()は,どのテキストノードについても真とする。例えば,child::text()は,文脈ノードの子

テキストノードを選択することになる。同様に,ノード試験comment()は,どのコメントノードについて

も真とし,ノード試験processing-instruction()はどの処理命令についても真とする。processing-instruction()

試験は,Literalである引数をもってもよい。この場合,Literalの値に等しい名前をもつどの処理命令につ

いても真とする。  

ノード試験node()は,どの型をもつどのノードについても真とする。  

ノード試験の構文を次に示す。 

[7] 

NodeTest  

::= NameTest   

| NodeType '(' ')'   

| 'processing-instruction' '(' Literal ')'   

注記 構文規則内の構成子は,(存在する場合には)本文中の次の日本語と対応する。 

NodeTest 

ノード試験 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

NameTest 

名前試験 

NodeType 

ノード型 

Literal 

リテラル 

2.4 

述部 

軸は,順方向軸か逆方向軸かのどちらかとする。文脈ノード,又は文書順(箇条5参照)に文脈ノード

の後にあるノードだけしか含まない軸は,順方向軸とする。文脈ノード,又は文書順に文脈ノードの前に

あるノードだけしか含まない軸は,逆方向軸とする。したがって,ancestor軸,ancestor-or-self軸,preceding

軸,preceding-sibling軸は,逆方行軸になる。その他の軸は,すべて順方行軸になる。ただし,self軸は常

に最大で1個のノードしか含まないので,順方行軸でも逆方行軸でも差異はない。軸に関するノード集合

のメンバの近接度位置(proximity position)は,軸が順方行軸の場合は文書順に,逆方行軸の場合は逆文書順

に,順序付けられたノード集合におけるそのノードの位置と定義する。最初の位置は,1とする。  

述部は,軸に関してノード集合をフィルタリングして,新しいノード集合を作る。フィルタリングされ

るノード集合の中の各ノードに対して,PredicateExprは,そのノードを文脈ノードとし,そのノード集合

のノード数を文脈サイズとし,軸に関してノード集合におけるノードの近接度位置を文脈位置として,評

価される。PredicateExprがそのノードについて真と評価される場合,そのノードは,新しいノード集合に

含まれる。そうでない場合には,それは含まれない。 

PredicateExprは,Exprを評価してその結果を論理型に変換することによって,評価される。結果が数値

型である場合には,その結果は,数値型が文脈位置に等しい場合には真に変換され,それ以外の場合には

偽に変換される。結果が数値型でない場合には,結果は,boolean関数への呼出しによるものとして変換さ

れる。したがって,para[3]という位置パスは,para[position()=3]と等価になる。 

述部の構文を次に示す。 

[8] 

Predicate  

::= '[' PredicateExpr ']'   

[9]    PredicateExpr 

::= Expr   

注記 構文規則内の構成子は,(存在する場合には)本文中の次の日本語と対応する。 

Predicate 

述部 

PredicateExpr  

述部式 

Expr  

式 

2.5 

短縮構文 

短縮構文を使った位置パスの例を次に示す。 

例  

a) paraは,文脈ノードの子要素paraを選択する。 

b) * は,文脈ノードの子要素のすべてを選択する。 

c) text()は,文脈ノードの子テキストノードのすべてを選択する。 

d) @nameは,文脈ノードのname属性を選択する。 

e) @*は,文脈ノードのすべての属性を選択する。 

f) 

para[1]は,文脈ノードの最初の子paraを選択する。 

g) para[last()]は,文脈ノードの最後の子paraを選択する。 

h) */paraは,文脈ノードの孫paraのすべてを選択する。 

i) 

/doc/chapter[5]/section[2]は,docの5番目のchapterの2番目のsectionを選択する。 

j) 

chapter//paraは,文脈ノードの子要素chapterの子孫要素paraを選択する。  

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

k) //paraは,文書ルートの子孫paraのすべてを選択し,したがって,文脈ノードと同じ文書の中

のpara要素のすべてを選択する。 

l) 

//olist/itemは,親olistをもち,文脈ノードと同じ文書にあるitem要素のすべてを選択する。 

m) . (ドット一つ)は,文脈ノードを選択する。 

n) .//paraは,文脈ノードの子孫要素paraを選択する。 

o) .. (ドット二つ)は,文脈ノードの親を選択する。 

p) ../@langは,文脈ノードの親のlang属性を選択する。 

q) para[@type="warning"]は,値warningをとるtype属性をもつ,文脈ノードの子paraのすべてを

選択する。 

r) para[@type="warning"][5]は,値warningをとるtype属性をもつ,文脈ノードの5番目の子para

を選択する。 

s) 

para[5][@type="warning"]は,文脈ノードの5番目の子paraを,それが値warningをとるtype属

性をもつときに,選択する。 

t) 

chapter[title="Introduction"]は,文字列値(箇条5参照)がIntroductionに等しい1個以上の子title

をもつ,文脈ノードの子chapterを選択する。 

u) chapter[title]は,1個以上の子titleをもつ,文脈ノードの子chapterを選択する。 

v) employee[@secretary and @assistant]は,文脈ノードの子employeeで,secretary属性及びassistant

属性の両方をもつものすべてを選択する。 

最も重要な短縮形は,child::を位置ステップから省けることとする。実効的には,childは既定の軸とす

る。例えば,div/paraという位置パスは,child::div/child::paraに関する短縮になる。 

属性に関する短縮形もある。attribute::は,@に短縮できる。例えば,para[@type="warning"]という位置パ

スは,child::para[attribute::type="warning"]の短縮であって,warningに等しい値をとるtype属性をもつ子para

を選択する。 

// は,/descendant-or-self::node()/の短縮とする。例えば,//paraは,/descendant-or-self::node()/child::paraの

短縮であるので,文書中のどのpara要素をも選択する。文書要素ノードはルートノードの子であるので,

文書要素であるpara要素でさえ//paraによって選択されることになる。div//paraは,

child::div/descendant-or-self::node()/child::paraの短縮であるので,子divの子孫paraのすべてを選択すること

になる。  

注記 //para[1]という位置パスは,位置パス /descendant::para[1] と同じものを意味しない。後者は,

最初の子孫要素paraを選択する。前者は,その親の最初の子paraであるような子孫要素para

のすべてを選択する。  

. (ドット)という位置ステップは,self::node()の短縮とする。これは,//との組合せで特に有用である。

例えば,.//paraという位置パスは,self::node()/descendant-or-self::node()/child::paraの短縮であるので,文脈

ノードの子孫要素paraのすべてを選択することになる。  

同様に,..という位置ステップは,parent::node()の短縮とする。例えば,../titleは,parent::node()/child::title

の短縮であるので,文脈ノードの親の子titleを選択することになる。  

短縮形の構文を次に示す。 

[10] 

AbbreviatedAbsoluteLocationPath 

::= '//' RelativeLocationPath   

[11] 

AbbreviatedRelativeLocationPath 

::= RelativeLocationPath '//' Step   

[12] 

AbbreviatedStep 

::= '.'   

background image

10 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

| '..'   

[13] 

AbbreviatedAxisSpecifier 

::= '@'?   

注記 構文規則内の構成子は,(存在する場合には)本文中の次の日本語と対応する。 

AbbreviatedAbsoluteLocationPath 

短縮絶対位置パス 

RelativeLocationPath 

相対位置パス 

AbbreviatedRelativeLocationPath 

短縮相対位置パス 

Step  

ステップ,位置ステップ 

AbbreviatedStep  

短縮ステップ,短縮位置ステップ 

AbbreviatedAxisSpecifier  

短縮軸,短縮軸指定子 

式 

3.1 

基本 

VariableReferenceは,文脈における変数束縛の集合の中で,変数名が束縛されている値に評価される。

変数名が,式の文脈における変数束縛の集合の中で,いかなる値にも束縛されていない場合には,誤りと

する。  

括弧は,グループ化を行うために使用してよい。  

式の構文を次に示す。 

[14] 

Expr 

::= OrExpr   

[15] 

PrimaryExpr 

::= VariableReference   

| '(' Expr ')'   

| Literal   

| Number   

| FunctionCall   

注記 構文規則内の構成子は,(存在する場合には)本文中の次の日本語と対応する。 

Expr  

式 

OrExpr 

or式 

PrimaryExpr 

基本式 

VariableReference 

変数参照 

Literal 

リテラル 

Number 

数,数値,数値型 

FunctionCall 

関数呼出し 

3.2 

関数呼出し 

FunctionCall式は,式評価文脈関数ライブラリの中の関数を識別するためにFunctionNameを使用し,

Argumentの各々を評価し,各引数を関数が要求する型に変換し,最後に,関数を呼び出してその変換され

た引数を関数に渡すことによって,評価される。引数の個数が間違っている場合,又は引数が要求される

型に変換できない場合には,誤りとする。FunctionCall式の結果は,呼び出される関数が返す結果とする。  

引数が文字列型に変換される場合には,string関数の呼出しによって行われるのと同様に変換される。

引数が数値型に変換される場合には,number関数の呼出しによって行われるのと同様に変換される。引数

が論理型に変換される場合には,boolean関数の呼出しによって行われるのと同様に変換される。ノード集

合型ではない引数は,ノード集合に変換できない。 

11 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

関数呼出しの構文を次に示す。 

[16] 

FunctionCall 

::= FunctionName '(' ( Argument ( ',' Argument )* )? ')'   

[17] 

Argument  

::= Expr   

注記 構文規則内の構成子は,(存在する場合には)本文中の次の日本語と対応する。 

FunctionCall 

関数呼出し 

FunctionName  

関数名 

Argument 

引数 

Expr  

式 

3.3 

ノード集合型 (node-set) 

位置パスは,式として使用できる。その式は,パスによって選択されるノードの集合を返す。  

| 演算子は,その演算対象(オペランド)の和集合を計算するが,演算対象は,ノード集合でなければ

ならない。  

Predicateは,位置パスで使用するのと同じ方法で,式をフィルタリングするために使用する。フィルタ

リングされる式がノード集合へと評価されない場合には,誤りとする。Predicateは,子軸に関してノード

集合をフィルタリングする。  

注記 Predicateの意味は,どの軸を適用するかに決定的に依存する。例えば,preceding::foo[1] は,逆

文書順で最初の foo 要素を返す。これは,[1]という述部に適用される軸が先行する軸になるこ

とによる。反対に,(preceding::foo)[1] は,文書順で最初の foo 要素を返す。これは,[1]とい

う述部に適用される軸が子軸になることによる。  

/ 演算子及び // 演算子は,式及び相対的位置パスを構成する。式がノード集合へと評価されない場合,

誤りとする。/ 演算子は,/ を位置パスで使用するときと同じ方法で構成を行う。位置パスにおけるのと

同様に,// は,/descendant-or-self::node()/ の短縮形とする。  

ノード集合へと変換可能なオブジェクトの型は存在しない。  

ノード集合の式の構文を次に示す。 

[18] 

UnionExpr 

::= PathExpr   

| UnionExpr '|' PathExpr   

[19] 

PathExpr  

::= LocationPath   

| FilterExpr   

| FilterExpr '/' RelativeLocationPath   

| FilterExpr '//' RelativeLocationPath   

[20] 

FilterExpr  

::= PrimaryExpr   

| FilterExpr Predicate   

注記 構文規則内の構成子は,(存在する場合には)本文中の次の日本語と対応する。 

UnionExpr 

合併式 

PathExpr 

パス式 

LocationPath 

位置パス 

FilterExpr 

フィルタ式 

RelativeLocationPath 

相対位置パス 

PrimaryExpr 

基本式 

Predicate 

述部 

12 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

3.4 

論理型 (boolean) 

論理型のオブジェクトは,二つの値,真(true)及び偽(false),の一つをもつことができる。 

or 式は,各々の演算対象を評価し,その値をboolean関数への呼出しを行ったものとして論理型に変換

することによって評価する。結果は,(演算対象の)いずれかの値が真の場合に真とし,そうでない場合は

偽とする。右側の演算対象は,左側の演算対象が真と評価される場合には,評価しない。 

and 式は,各々の演算対象を評価し,その値をboolean関数への呼出しを行ったものとして論理型に変

換することによって評価する。結果は,(演算対象の)両方の値が真の場合に真とし,そうでない場合は偽

とする。右側の演算対象は,左側の演算対象が偽と評価される場合には,評価しない。 

(RelationalExprではない)EqualityExpr又は(AdditiveExprではない)RelationalExprは,二つの演算対

象を評価した結果のオブジェクトを比較することによって評価する。結果のオブジェクトの比較は,次の

三つの段落で定義する。最初に,ノード集合を含む比較をノード集合を含まない比較を用いて定義する。

これは,=,!=,<=,<,>= 及び > に対して統一的に定義する。2番目に,ノード集合を含まない比較を 

= 及び != に対して定義する。3番目に,ノード集合を含まない比較を <=,<,>= 及び > に対して定義

する。 

比較する両方のオブジェクトがノード集合の場合,その比較は,あるノードが最初のノード集合の中に

存在し,更に,あるノードが2番目のノード集合の中にも存在して,その二つのノードの文字列値(箇条

5参照)に関して比較を実行した結果が,真の場合に限り,真とする。比較する一つのオブジェクトがノ

ード集合であって他方が数値の場合,その比較は,あるノードがノード集合の中に存在して,そのノード

の文字列値をnumber関数を用いて数値に変換した結果と,それと比較する数値に関する比較を実行した

結果とが,真の場合に限り,真とする。比較するオブジェクトの一つがノード集合であって他方が文字列

の場合,その比較は,あるノードがノード集合の中に存在し,そのノードの文字列値及び他方の文字列に

関して比較を実行した結果が,真の場合に限り,真とする。比較する一つのオブジェクトがノード集合で

あって他方が論理型の場合,その比較は,その論理型と,ノード集合をboolean関数を用いて論理型に変

換した結果とに関して比較を実行した結果が,真の場合に限り,真とする。  

比較するオブジェクトのいずれもがノード集合ではなく,演算子が = 又は != の場合,それらのオブジ

ェクトは,次に示すとおりの共通型に変換しその後に比較することによって比較する。比較するオブジェ

クトの少なくとも一つが論理型の場合,比較する各々のオブジェクトは,boolean関数を適用するものとし

て論理型に変換する。そうでない場合であって,比較するオブジェクトの少なくとも一つが数値の場合,

比較する各々のオブジェクトは,number関数を適用するものとして数値に変換する。そうでない場合,比

較するオブジェクトの両方は,string関数を適用するものとして文字列に変換する。= の比較は,オブジ

ェクトが等しい場合に限り,真とする。!= の比較は,オブジェクトが等しくない場合に限り,真とする。

数値は,IEEE 754 [IEEE 754]に従う等しさで比較する。二つの論理型は,両方が真又は両方が偽のいずれ

かの場合に限り,等しい。二つの文字列は,それらがUCS文字の同じ列から成る場合に限り,等しい。  

注記 $x がノード集合に束縛されている場合,$x="foo" は,not($x!="foo") と同じことを意味しない。

$x="foo" は,$x の中のあるノードが文字列値 foo をもつ場合に限り,真になる。not($x!="foo") 

は,$x の中のすべてのノードが文字列値 foo をもつ場合に限り,真になる。  

比較するオブジェクトのいずれもがノード集合でなく,演算子が <=,<,>= 又は > の場合,それらの

オブジェクトは,両方を数値に変換しIEEE 754に従って数値を比較することによって比較する。< の比較

は,最初の数値が2番目の数値よりも小さい場合に限り,真とする。<= の比較は,最初の数値が2番目

の数値以下の場合に限り,真とする。> の比較は,最初の数値が2番目の数値よりも大きい場合に限り,

13 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

真とする。>= の比較は,最初の数値が2番目の数値以上の場合に限り,真とする。  

注記 XPath式がXML文書に現れる場合,< 及び <= 演算子は,XML 1.0の規則に従って,例えば,

&lt; 及び &lt;= を用いて引用されなければならない。次の例では,test 属性の値が,XPath式

になっている。  

<xsl:if test="@value &lt; 10">...</xsl:if> 

論理型の式の構文を次に示す。 

[21] 

OrExpr 

::= AndExpr   

| OrExpr 'or' AndExpr   

[22] 

AndExpr ::= EqualityExpr   

| AndExpr 'and' EqualityExpr   

[23] 

EqualityExpr 

::= RelationalExpr   

| EqualityExpr '=' RelationalExpr   

| EqualityExpr '!=' RelationalExpr   

[24] 

RelationalExpr 

::= AdditiveExpr   

| RelationalExpr '<' AdditiveExpr   

| RelationalExpr '>' AdditiveExpr   

| RelationalExpr '<=' AdditiveExpr   

| RelationalExpr '>=' AdditiveExpr   

注記1 この文法による効果は,次に示す優先順位の順序による。優先順位の順序は,より低い優先

順位のものを先(上及び左)に示してある。  

or  

and  

=, !=  

<=, <, >=, >  

 さらに,演算子は,すべて,左結合とする。例えば,3 > 2 > 1 は,(3 > 2) > 1 と等価であ

って,偽と評価する。  

注記2 構文規則内の構成子は,(存在する場合には)本文中の次の日本語と対応する。 

OrExpr 

or式 

AndExpr 

and式 

EqualityExpr  

等号類式 

RelationalExpr 

関係式 

RelativeLocationPath 

相対位置パス 

AdditiveExpr  

加減式 

3.5 

数値型 (number) 

数値は,浮動小数点数値を表現する。数値は,倍精度64ビット形式のIEEE 754値[IEEE 754]をもつこと

ができる。これらには,“非数”(Not-a-Number,NaN)値,正の無限大及び負の無限大,並びに正の0及び

負の0を含む。IEEE 754規定の主要な要約については,[JLS]の4.2.3を参照する。  

数値演算子は,その演算対象を,number関数の呼出しを行うものとして,数値に変換する。  

+ 演算子は,加算を実行する。  

2項の - 演算子は,減算を実行する。単項の - 演算子は,負数を示す。-0 は,負の0と評価されるこ

14 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

とに注意。  

注記 XMLは名前の中に - を許しているので,通常,- 演算子は,空白によって先行される必要が

ある。例えば,foo-bar は,foo-bar と名前が付けられた子要素を含むノード集合に評価される。

foo - bar は,最初の foo 子要素の文字列値を数値に変換した結果と,最初の bar 子要素の文

字列値を数値に変換した結果との差に評価する。  

* 演算子は,IEEE 754に従った浮動小数点の乗算を実行する。結果がNaNでない場合,演算対象の両

方が同じ符号をもつとき及びそのときに限り,結果が正となることに注意。  

div 演算子は,IEEE 754に従った浮動小数点の除算を実行する。結果がNaNでない場合,演算対象の両

方が同じ符号をもつとき及びそのときに限り,結果が正となることに注意。   

mod 演算子は,切捨て(truncating)除算からの剰余を返す。次に例を示す。  

例 

5 mod 2 は,1 を返す。  

5 mod -2 は,1 を返す。  

-5 mod 2 は,-1 を返す。  

-5 mod -2 は,-1 を返す。  

注記1 これは,Java及びECMAScriptにおける % 演算子と同じになっている。  

注記2 これは,IEEE 754の剰余演算子とは同じではない。IEEE 754の剰余演算子は,丸め(rounding)

除算からの剰余を返す。  

数値型の式の構文を次に示す。 

[25] 

AdditiveExpr 

::= MultiplicativeExpr   

 | AdditiveExpr '+' MultiplicativeExpr   

 | AdditiveExpr '-' MultiplicativeExpr   

[26] 

MultiplicativeExpr ::= UnaryExpr   

 | MultiplicativeExpr MultiplyOperator UnaryExpr   

 | MultiplicativeExpr 'div' UnaryExpr   

 | MultiplicativeExpr 'mod' UnaryExpr   

[27] 

UnaryExpr 

::= UnionExpr   

 | '-' UnaryExpr   

注記 構文規則内の構成子は,(存在する場合には)本文中の次の日本語と対応する。 

AdditiveExpr 

加減式 

MultiplicativeExpr 

乗除式 

UnaryExpr 

単項式 

MultiplyOperator 

乗算演算子 

3.6 

文字列型 (string) 

文字列は,0個以上の文字の列から成る。ここで,文字とは,XMLの規格(JIS X 4159)のとおりに定義

される。したがって,XPathにおける単一の文字とは,単一の対応するUnicodeスカラ値をもつ単一の

Unicode抽象文字([Unicode]参照)に相当する。これは,16ビットのUnicode符号値と同じではない。U+FFFF

よりも大きなUnicodeスカラ値をもつ抽象文字のためのUnicode符号化文字表現は,16ビットのUnicode

符号値の対(サロゲートペア,surrogate pair)になる。多くのプログラム言語では,文字列は,16ビット

のUnicode符号値の列によって表現される。それらの言語でのXPathの実装は,サロゲートペアが単一の

15 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

XPath文字として正しく取り扱われることを確実に行うように注意しなければならない。  

注記 Unicodeでは,Unicode抽象文字の異なる列から成るにもかかわらず,同一として取り扱われる

ことが望ましい二つの文字列が存在する可能性がある。例えば,幾つかのアクセント付き文字

は,事前に構成した形式又は分解した形式のいずれかで表現してよい。そのために,XPath式

における文字及びXML文書における文字の両方が正準形式に正規化していない場合には,

XPath式は,期待しない結果を返すことがある([Character Model]参照)。  

3.7 

字句構造 

トークン化を行う場合,最も長くて解釈が可能なトークンを常に返す。 

読みやすさのために,空白は,文法によって明示的には許されていない場合であっても,式の中で使用

してもよい。すなわち,ExprWhitespaceを,ExprTokenの前後の式内に自由に追加してもよい。ただし,

ExprTokenの中間には追加してはならない。 

ExprToken文法をあいまいにしないために,次の特殊なトークン化規則を指定した順序で適用しなけれ

ばならない。  

a) 先行するトークンが存在し,その先行するトークンが @,::,(,[,,(コンマ) 又は Operatorの一

つではない場合,* は,MultiplyOperatorとして認識しなければならず,NCNameは,OperatorName

として認識しなければならない。  

b) 挿入されているかもしれないExprWhitespaceの後のQNameに続く文字が ( (1バイト文字符号の開

き丸括弧)となる場合,そのトークンは,NodeType又はFunctionNameとして認識しなければならな

い。  

c) 挿入されているかもしれないExprWhitespaceの後のNCNameに続く二つの文字が :: となる場合,そ

のトークンは,AxisNameとして認識しなければならない。  

d) そうでない場合には,トークンを,MultiplyOperator,OperatorName,NodeType,FunctionName又は

AxisNameとして認識してはならない。  

呼出し側の言語は,JIS X 4159及びJIS X 4158の字句規則に従うか,又はその代わりに[XML 1.1]及び

[XML Names 1.1]の字句規則に従うかを選択してよい。式の字句構造を次に示す。 

[28] 

ExprToken 

::= '(' | ')' | '[' | ']' | '.' | '..' | '@' | ',' | '::'   

| NameTest   

| NodeType   

| Operator   

| FunctionName   

| AxisName   

| Literal   

| Number   

| VariableReference   

[29] 

Literal 

::= '"' [^"]* '"'   

| "'" [^']* "'"   

[30] 

Number ::= Digits ('.' Digits?)?   

| '.' Digits   

[31] 

Digits 

::= [0-9]+   

[32] 

Operator ::= OperatorName   

background image

16 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

| MultiplyOperator   

| '/' | '//' | '|' | '+' | '-' | '=' | '!=' | '<' | '<=' | '>' | '>='   

[33] 

OperatorName 

::= 'and' | 'or' | 'mod' | 'div'   

[34] 

MultiplyOperator 

::= '*'   

[35] 

FunctionName 

::= QName - NodeType    

[36] 

VariableReference ::= '$' QName   

[37] 

NameTest  

::= '*'   

| NCName ':' '*'   

| QName   

[38] 

NodeType  

::= 'comment'   

| 'text'   

| 'processing-instruction'   

| 'node'   

[39] 

ExprWhitespace 

::= S  (JIS X 4159で定義。) 

注記 構文規則内の構成子は,(存在する場合には)本文中の次の日本語と対応する。 

ExprToken 

式トークン 

NameTest 

名前試験 

NodeType 

ノード型 

Operator 

演算子 

FunctionName  

関数名 

AxisName 

軸名 

Literal 

リテラル 

Number 

数,数値,数値型 

VariableReference 

変数参照 

Digits  

数字 

OperatorName  

演算子名 

MultiplyOperator 

乗算演算子 

QName 

修飾名 

NCName 

名前空間名 

ExprWhitespace  

式空白 

主要関数ライブラリ 

箇条4は,XPath実装が式を評価するために使用する関数ライブラリの中に常に含めなければならない

関数を定義する。  

関数ライブラリの中の各関数は,関数の原型(prototype)を用いて指定する。この原型は,返却型,関数の

名前及び引数型を与える。引数型の後に疑問符(“?”)がある場合には,その引数は任意選択とする。そう

でない場合には,その引数は必す(須)とする。  

4.1 

ノード集合関数 

関数 数値型 last()  

last関数は,式評価文脈から文脈サイズに等しい数値を返す。  

17 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

関数 数値型 position()  

position関数は,式評価文脈から文脈位置に等しい数値を返す。 

関数 数値型 count(ノード集合型)  

 count関数は,引数であるノード集合の中のノード数を返す。 

関数 ノード集合型 id(オブジェクト型) 

id関数は,一意ID(5.2.1参照)によって要素を選択する。idへの引数がノード集合型の場合,結

果は,引数であるノード集合の中の各ノードの文字列値にidを適用した結果の和集合とする。idへの

引数がそれ以外の型の場合,その引数は,string関数への呼出しによるものとして文字列に変換する。

その文字列は,空白で区切られたトークンのリストに分ける。空白は,JIS X 4159の生成規則Sに,

JIS X 4159で定義するとおりにマッチする文字の列とする。結果は,リストの中のトークンに等しい

一意IDをもつ要素であって,文脈ノードと同じ文書の中にある要素を含むノード集合とする。 

a) id("foo") は,一意ID foo をもつ要素を選択する。 

b) id("foo")/child::para[position()=5] は,一意ID foo をもつ要素の子である5番目の para を選択す

る。  

関数 文字列型 local-name(ノード集合型 ?)  

local-name関数は,引数であるノード集合の中の文書順(箇条5参照)で最初のノードの展開名の

局所部分を返す。引数のノード集合が空か,又は最初のノードが展開名をもたない場合には,空文字

列が返される。引数が省略された場合には,文脈ノードを唯一のメンバとするノード集合を既定の引

数として用いる。  

関数 文字列型 namespace-uri(ノード集合型 ?)  

namespace-uri関数は,引数であるノード集合の中の文書順で最初のノードの展開名の名前空間URI

を返す。引数のノード集合が空,最初のノードが展開名をもたない,又は展開名の名前空間URIがヌ

ルの場合には,空文字列が返される。引数が省略された場合には,文脈ノードを唯一のメンバとする

ノード集合を既定の引数として用いる。  

注記 namespace-uri関数が返す文字列は,要素ノード及び属性ノード以外については空になる。  

関数 文字列型 name(ノード集合型 ?)  

name関数は,引数であるノード集合の中の文書順で最初のノードの展開名を表現するQNameを含

む文字列を返す。QNameは,展開名で表現するノード上の実効的な名前空間宣言に関するその展開名

を表現しなければならない。通常は,これは,XMLソースに出現したQNameになる。複数の接頭辞

を同じ名前空間に関連付ける複数の名前空間宣言がそのノード上に存在する場合には,そうなる必要

はない。しかし,実装は,ノードのその表現の中に元々の接頭辞についての情報を含めてもよい。こ

の場合,実装は,返す文字列が常にXMLソースの中で使用しているQNameと確実に同じになるよう

にできる。引数であるノード集合が空か,又は最初のノードが展開名をもたない場合,空文字列を返

す。引数を省略した場合には,文脈ノードを唯一のメンバとするノード集合を既定の引数として用い

る。 

注記 name関数が返す文字列は,要素ノード及び属性ノード以外については,local-name関数が返

す文字列と同じになる。 

4.2 

文字列型関数 

関数 文字列型 string(オブジェクト型 ?)  

string関数は,次のとおりに,オブジェクトを文字列に変換する。  

18 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

a) ノード集合は,そのノード集合の中の文書順で最初のノードの文字列値を返すことによって,

文字列に変換する。ノード集合が空の場合には,空文字列を返す。  

b) 数値は,次の文字列に変換する。  

1) NaNは,文字列 NaN に変換する。  

2) 正の0は,文字列 0 に変換する。  

3) 負の0は,文字列 0 に変換する。  

4) 正の無限大は,文字列 Infinity に変換する。  

5) 負の無限大は,文字列 -Infinity に変換する。  

6) 数値が整数の場合,その数値は,10進小数点も先行する0もないNumberとして,10進形式

で表現する。数値が負の場合には,マイナス記号(-)を最初に付ける。  

7) そうでない場合には,数値は,10進小数点の前に少なくとも一つの数字をもち,10進小数点

の後に少なくとも一つの数字をもつ10進小数点を含んだNumberとして,10進形式で表現す

る。数値が負の場合には,マイナス記号(-)を最初に付ける。10進小数点の直前の必す(須)

の一つの数字以外は,10進小数点の前に先行する0が存在してはならない。10進小数点の後

の必す(須)の一つの数字以外に,その数値をすべての他のIEEE 754数値から一意に区別す

るために必要とする,より多くの,しかし必要な個数だけの数字が存在しなければならない。  

c) 論理型の偽の値は,文字列 false に変換する。論理型の真の値は,文字列 true に変換する。  

d) これらの基本型以外の型のオブジェクトは,その型に依存する方法で,文字列に変換する。  

引数を省略した場合には,文脈ノードを唯一のメンバとするノード集合を既定の引数として用いる。  

注記 string 関数は,利用者への表示のために数値を文字列に変換することを意図してはいない。

JIS X 4169における format-number 関数及び xsl:number 要素が,この機能を提供する。  

関数 文字列型 concat(文字列型, 文字列型, 文字列型*)  

concat関数は,その引数の(文字列の)連結を返す。  

注記 concat関数における記法“*”の意味は,W3CのXPathの原勧告及びErrataにおいて定義さ

れていない。XPathの開発者,利用者,既存のXPathの処理系などから調査した結果では,3

番目以降の引数として“文字列型”を0個以上とってよいことを示すと思われる。例えば,

五つの文字列を連結したい場合には,concatに五つの文字列型の引数を与えてよいことを示

す。最初及び2番目の引数には“*”が付いていないことに注意する。すなわちconcatは,

少なくとも二つの引数をもつ。  

関数 論理型 starts-with(文字列型, 文字列型)  

starts-with関数は,最初の引数の文字列が2番目の文字列の引数で開始する場合に,真を返す。そう

でない場合に,偽を返す。2番目の引数の文字列が空文字列の場合,真を返す。   

関数 論理型 contains(文字列型, 文字列型)  

contains関数は,最初の引数の文字列が2番目の引数の文字列を含む場合に,真を返す。そうでな

い場合に,偽を返す。2番目の引数の文字列が空文字列の場合,真を返す。  

関数 文字列型 substring-before(文字列型, 文字列型)  

substring-before関数は,最初の引数の文字列の中における2番目の引数の文字列の最初の出現に先

行する最初の引数の文字列の部分文字列を返す。最初の引数の文字列が2番目の引数の文字列を含ま

ない場合には,空文字列を返す。例えば,substring-before("1999/04/01","/") は,1999 を返す。2番目

の引数の文字列が空文字列の場合,空文字列を返す。   

19 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

関数 文字列型 substring-after(文字列型, 文字列型)  

substring-after関数は,最初の引数の文字列の中における2番目の引数の文字列の最初の出現に続く

最初の引数の文字列の部分文字列を返す。最初の引数の文字列が2番目の引数の文字列を含まない場

合には,空文字列を返す。例えば,substring-after("1999/04/01","/") は,"04/01" を返し,substring-after 

("1999/04/01","19") は,"99/04/01" を返す。2番目の引数の文字列が空文字列の場合,最初の引数の文

字列を返す。   

関数 文字列型 substring(文字列型, 数値型, 数値型 ?)  

substring関数は,2番目の引数で指定した位置から開始する3番目の引数で指定した長さをもつ最

初の引数の文字列の部分文字列を返す。例えば,substring("12345",2,3) は,"234" を返す。3番目の引

数を指定しない場合には,2番目の引数で指定した位置から開始しその文字列の最後まで続く(最初

の引数の文字列の)部分文字列を返す。例えば,substring("12345",2) は,"2345" を返す。  

より正確には,文字列(3.6参照)における各々の文字は,一つの数値的な位置をもつ。すなわち,

最初の文字の位置は1とし,2番目の文字の位置は2とし,以下同様とする。  

注記 これは,Java及びECMAScriptとは異なっている。これらでは,String.substring メソッドが,

最初の文字の位置を0として取り扱う。  

返す部分文字列は,文字の位置が,2番目の引数の丸められた値以上になる文字を含み,更に,3

番目の引数を指定した場合には,文字の位置が,2番目の引数の丸められた値と3番目の引数の丸め

られた値との合計よりも小さな文字(だけ)を含む。これらに使用される比較及び加算は,規定IEEE 

754の規則に従う。丸めは,round関数の呼出しによるものとして行われる。次の例は,さまざまな通

常ではない場合を示す。  

例 

substring("12345", 1.5, 2.6) は,"234" を返す。  

substring("12345", 0, 3) は,"12" を返す。  

substring("12345", 0 div 0, 3) は,"" を返す。  

substring("12345", 1, 0 div 0) は,"" を返す。  

substring("12345", -42, 1 div 0) は,"12345" を返す。  

substring("12345", -1 div 0, 1 div 0) は,"" を返す。 

関数 数値型 string-length(文字列型 ?)  

string-length関数は,文字列(3.6 参照)の中の文字の個数を返す。引数を省略した場合には,文字

列に変換した文脈ノード,言い換えると,文脈ノードの文字列値,を既定の引数として用いる。  

関数 文字列型 normalize-space(文字列型 ?)  

normalize-space関数は,引数の文字列を,先行する空白及び後続する空白を取り除き空白文字の列

を一つのスペースに置き換えることによって正規化された空白をもつ文字列にして返す。空白文字は,

JIS X 4159におけるSの生成規則によって規定するものと同じとする。引数を省略した場合には,文

字列に変換された文脈ノード,言い換えると,文脈ノードの文字列値,を既定の引数として用いる。  

関数 文字列型 translate(文字列型, 文字列型, 文字列型)  

translate関数は,2番目の引数の文字列の中の文字の,最初の引数の文字列の中での出現を,3番目

の引数の文字列の中の対応する位置にある文字で置き換えて返す。例えば,translate("bar","abc","ABC") 

は,文字列 BAr を返す。(2番目の引数の文字列が3番目の引数の文字列よりも長いために,)3番目

の引数の文字列の中の対応する位置に文字がない,2番目の引数の文字列の中の文字が存在する場合

20 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

には,最初の引数の文字列の中のその文字の出現は取り除かれる。例えば,translate 

("--aaa--","abc-","ABC") は,"AAA" を返す。一つの文字が2番目の引数の文字列の中に一回よりも多

く出現する場合には,最初の出現が,その置換する文字を決定する。3番目の引数の文字列が2番目

の引数の文字列よりも長い場合には,余分な文字は無視する。  

注記 translate関数は,すべての言語における大文字及び小文字の変換のための十分な解ではない。

XPathの将来の版は,大文字及び小文字の変換のための追加関数を提供するかもしれない。  

4.3 

論理型関数 

関数 論理型 boolean(オブジェクト型)  

boolean関数は,次のとおりに,その引数を論理型に変換する。  

a) 数値は,正の0,負の0又はNaNのいずれでもない場合に限り,真とする。 

b) ノード集合は,空でない場合に限り,真とする。 

c) 文字列は,その長さが0でない場合に限り,真とする。 

d) これらの基本型以外の型であるオブジェクトは,その型に依存する方法で論理型に変換する。 

関数 論理型 not(論理型)  

not関数は,その引数が偽の場合に真を返し,そうでない場合に偽を返す。  

関数 論理型 true()  

true関数は,真を返す。  

関数 論理型 false()  

false関数は,偽を返す。  

関数 論理型 lang(文字列型)  

lang関数は,xml:lang 属性によって指定した文脈ノードの言語が引数の文字列によって指定した言

語と同じ又はそれの部分言語(sublanguage)になっているかどうかに依存して,真又は偽を返す。文脈

ノードの言語は,その文脈ノードの xml:lang 属性の値によって決定するか,又は文脈ノードが 

xml:lang 属性をもたない場合には,その文脈ノードの xml:lang 属性をもつ直近の祖先における 

xml:lang 属性の値によって決定する。それらの属性が存在しない場合には,lang関数は,偽を返す。

それらの属性が存在する場合には,その属性値が大文字及び小文字を無視した引数に等しいとき,又

は - で開始する添え字が存在し,その属性値の添え字を無視し大文字及び小文字を無視した引数にそ

の属性値が等しいとき,真を返す。 

例 

lang("en") は,文脈ノードが次の五つの要素のいずれかである場合に,真を返す。  

<para xml:lang="en"/> 

<div xml:lang="en"><para/></div> 

<para xml:lang="EN"/> 

<para xml:lang="en-us"/> 

4.4 

数値型関数 

関数 数値型 number(オブジェクト型 ?)  

number関数は,次のとおりに,その引数を数値に変換する。  

a) 任意選択の空白,任意選択のマイナス記号,Number及び空白がこの順序で続く文字列は,

(IEEE 754の直近への丸め規則に従って,)その文字列が表現する数学的な値に最も近いIEEE 

754の数値に変換する。それ以外の文字列は,NaNに変換する。  

21 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

b) 論理型の真は,1に変換する。論理型の偽は,0に変換する。 

c) ノード集合は,最初にstring関数への呼出しによるものとして文字列に変換し,次に文字列引

数と同じ方法で変換する。 

d) これらの基本型以外の型のオブジェクトは,その型に依存する方法で数値に変換する。 

引数を省略した場合には,文脈ノードを唯一のメンバとするノード集合を既定の引数として用いる。 

注記 number関数は,XML文書の中の要素が言語中立のフォーマットで数値データを表現する型

になっていない場合,その要素に出現する数値データを変換するために使用しないほうがよ

い。言語中立のフォーマットの数値データは,通常は,利用者に表示するために言語特有の

フォーマットに変換される。さらに,number関数は,その要素が使用する言語中立のフォー

マットがNumberのためのXPath構文と矛盾する場合には,使用できない。 

関数 数値型 sum(ノード集合型)  

sum関数は,引数のノード集合の中の各ノードに対して,そのノードの文字列値を数値に変換した

結果の合計を返す。  

関数 数値型 floor(数値型)  

floor関数は,その引数より大きくない整数である最大の(正の無限大に最も近い)数値を返す。引

数がNaNの場合,NaNを返す。引数が正の無限大の場合,正の無限大を返す。引数が負の無限大の

場合,負の無限大を返す。引数が正の0の場合,正の0を返す。引数が負の0の場合,負の0を返す。

引数が0よりも大きいが1よりも小さい場合,正の0を返す。   

関数 数値型 ceiling(数値型)  

ceiling関数は,その引数より小さくない整数である最小の(負の無限大に最も近い)数値を返す。

引数がNaNの場合,NaNを返す。引数が正の無限大の場合,正の無限大を返す。引数が負の無限大

の場合,負の無限大を返す。引数が正の0の場合,正の0を返す。引数が負の0の場合,負の0を返

す。引数が0よりも小さいが-1よりも大きい場合,負の0を返す。  

関数 数値型 round(数値型)  

round関数は,その引数に最も近い整数の数値を返す。そのような二つの数値が存在する場合には,

正の無限大に最も近いものを返す。引数がNaNの場合には,NaNを返す。引数が正の無限大の場合

には,正の無限大を返す。引数が負の無限大の場合には,負の無限大を返す。引数が正の0の場合に

は,正の0を返す。引数が負の0の場合には,負の0を返す。引数が0よりも小さいが,-0.5以上の

場合には,負の0を返す。  

注記 これらの最後の二つの場合については,round関数を呼び出した結果は,0.5を加えてその次

にfloor関数を呼び出した結果と同じではない。  

データモデル 

XPathは,木としてのXML文書を操作する。箇条5では,どのようにしてXPathがXML文書を木とし

てモデル化するかを示す。このモデルは,単に概念的なものであって,何らかの特別な実装を強制するわ

けではない。このモデルの,XML情報集合 [XML Infoset] に対する関係は,附属書Bに示す。  

XPathによって操作されるXML文書は,XML名前空間の規格JIS X 4158に適合しなければならない。  

木はノードを含む。ノードには次の七つの型がある。  

a) ルートノード  

b) 要素ノード  

22 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

c) テキストノード  

d) 属性ノード  

e) 名前空間ノード  

f) 

処理命令ノード  

g) コメントノード  

すべてのノード型に対して,その型のノードに対する文字列値を決定する方法がある。あるノード型に

対しては,文字列値はノードの一部とし,別のノード型に対しては,文字列値は子孫ノードの文字列値か

ら計算する。 

注記 要素ノード及びルートノードの場合は,ノードの文字列値は,DOMの nodeValueメソッド

([DOM]参照)が返す文字列と同じではない。 

展開名をもつノード型もある。展開名は,局所部分と名前空間URIとから成る対とする。局所部分は,

文字列とする。名前空間URIは,ヌル又は文字列のいずれかとする。XML文書の中の名前空間宣言にお

いて指定した名前空間名は,[RFC3986](及び[RFC3987])において定義するURI(及び/又はIRI)を参

照する。このことは,それが素片識別子をもつことができ,相対的になることが可能なことを意味する。

展開名の名前空間URI構成要素は,その接頭辞が,(素片識別子の有無にかかわらず)相対URIである名

前空間名をもつ名前空間宣言によって宣言されるQNameから,展開名が展開される場合,実装依存とす

る。それら展開名の名前空間URI構成要素の値に依存するXPath式は,相互運用可能ではない。二つの展

開名は,同一の局所部分をもつ場合であって,両者が共にヌルの名前空間URIをもつか,又は両者が共に

等しい非ヌルの名前空間URIをもつかのいずれかの場合に,等しくなる。 

文書内のすべてのノードに対して定義され,一般実体展開後の文書のXML表現において,各ノードの

XML表現の最初の文字が出現する順序に対応する,文書順という順序付けがある。これによって,ルート

ノードは,最初のノードになる。要素ノードは,その子よりも前に出現する。したがって,文書順は,要

素ノードを,(実体展開後の)XMLにおける開始タグの出現順序に順序付ける。要素の属性ノード及び名

前空間ノードは,要素の子よりも前に出現する。名前空間ノードは,属性ノードの前に出現する。複数の

名前空間ノードの相対的順序は,実装依存とする。複数の属性ノードの相対的順序は,実装依存とする。 逆

文書順は,文書順の逆とする。 

ルートノード及び要素ノードは,順序付けられた子ノードリストをもつ。複数のノードが子を共有する

ことは決してない。あるノードがもう一つのノードと同じでない場合には,あるノードの子は,もう一つ

のノードの子のどれとも同じにならない。ルートノード以外のすべてのノードは,親をただ一つだけもち,

親は要素ノード又はルートノードのいずれかとする。ルートノード又は要素ノードは,その子ノードのそ

れぞれの親とする。ノードの子孫は,ノードの子及びノードの子の子孫とする。 

5.1 

ルートノード 

ルートノードは,木のルートとする。ルートノードは,木のルートとして以外は出現しない。文書要素

の要素ノードは,ルートノードの子とする。ルートノードは,前書きの中及び文書要素末尾の後に出現す

る,処理命令及びコメントに対する処理命令ノード及びコメントノードも,子としてもつ。 

ルートノードの文字列値は,ルートノードのすべてのテキストノード子孫の文字列値の,文書順におけ

る連結とする。 

ルートノードは,展開名をもたない。 

5.2 

要素ノード 

文書内のあらゆる要素に対して要素ノードが存在する。要素ノードは,XML名前空間(JIS X 4158参照)

23 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

に従い,タグの中で指定する要素の QNameを展開して計算される展開名をもつ。QNameが接頭辞をもた

ず,適用可能な既定の名前空間が存在しない場合には,要素の展開名の名前空間URIはヌルとする。  

注記 JIS X 4158のA.3の記法では,展開名の局所部分は,ExpEType要素のtype属性に対応する。

展開名の名前空間URIは,ExpEType要素のns属性に対応し, ExpEType要素のns属性が省略

された場合には,ヌルとする。  

要素ノードの子は,その内容のための,要素ノード,コメントノード,処理命令ノード及びテキストノ

ードとする。内部実体及び外部実体のどちらへの実体参照も一緒に展開する。文字参照は解決する。  

要素ノードの文字列値は,要素ノードのすべてのテキストノード子孫の文字列値の,文書順における連

結とする。  

5.2.1 

一意ID 

要素ノードは,一意の識別子(ID)をもってもよい。これは,DTDにおいてID型として宣言する属性の

値とする。一つの文書中のどの二つの要素も同じ一意IDをもってはならない。XMLプロセサが,(文書

が妥当でない場合だけに可能だが,)一つの文書中の二つの要素が同じ一意IDをもっていると報告した場

合,文書順で二番目の要素は一意IDをもたないものとして扱わなければならない。  

注記 文書がDTDをもたない場合,文書中のどの要素も一意IDをもたないことになる。  

5.3 

属性ノード 

各要素ノードは,関連付けられた属性ノードの集合をもち,要素は,これらの属性ノードそれぞれの親

とする。ただし,属性ノードは,親である要素の子とはしない。 

注記 これは,DOMとは異なる。DOMは,属性をもつ要素を属性の親としては扱わない([DOM]参

照)。 

複数の要素が属性ノードを共有することは決してない。ある要素ノードがもう一つの要素ノードと同じ

ノードでない場合,ある要素ノードの属性ノードはどれも,もう一つの要素ノードの属性ノードと同じノ

ードにならない。 

注記 = 演算子は,二つのノードが同じ値をもつかどうかを試験し,それらが同じノードであるかど

うかは試験しない。したがって,二つの異なる要素の属性を,たとえそれらが同じノードでな

くとも,= を使用して等しいかどうか比較してよい。 

既定値の属性も指定した属性と同一に扱う。ある属性をDTD内でその要素型に対して宣言したが,既

定値を #IMPLIED と宣言し,しかもその属性をその要素に関して指定しない場合には,その要素の属性

集合は,その属性に対するノードを含まない。 

xml:lang,xml:spaceなどの属性は,別の子孫要素上の同じ属性のインスタンスで上書きしない場合には,

その属性が,その属性をもつ要素の子孫であるすべての要素に適用される。しかし,これは,属性ノード

が木の中のどこに現れるかに影響しない。要素は,その要素の開始タグ若しくは空要素タグにおいて明示

的に指定した属性だけに対して,又はDTDにおいて既定値付きで明示的に宣言した属性だけに対して,

属性ノードをもつ。 

属性ノードは,展開名及び文字列値をもつ。展開名は,XML名前空間の規格JIS X 4158に従い,XML

文書中のタグで指定されるQNameを展開して計算される。属性名の名前空間URIは,その属性のQName

が接頭辞をもたない場合には,ヌルになる。 

注記 JIS X 4158のA.3の記法では,展開名の局所部分はExpAName要素のname属性に対応する。

展開名の名前空間URIは,ExpAName要素のns 属性に対応し,ExpAName要素のns属性が省

略された場合には,ヌルとする。 

24 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

属性ノードは,文字列値をもつ。文字列値は,XMLの規格(JIS X 4159)によって指定する,正規化した

値とする。正規化した値が長さ0の文字列である属性も特別扱いされず,文字列値が長さ0の文字列であ

る属性ノードとなるだけとする。 

注記 既定値属性を,外部DTD又は外部パラメタ実体の中で宣言していることもある。XMLの規格

は,XMLプロセサに対して,それが妥当性検証していない場合には,外部DTD又は外部パラ

メタを読むことを要求しない。外部DTD又は外部パラメタ実体で宣言された既定値属性の値

をXPath木が含むことを前提とするスタイルシートなどは,妥当性検証を行わないXMLプロ

セサとともに動作しなくてもよい。 

名前空間を宣言する属性(JIS X 4158参照)に対応する属性ノードは存在しない。 

5.4 

名前空間ノード 

各要素は,関連付けられた名前空間ノードの集合をもつ。要素の有効範囲内にある明示した名前空間接

頭辞(これは,XML名前空間の規格JIS X 4158によって暗黙に宣言する,xml接頭辞を含む。)それぞれ

に対して一つ,及び既定の名前空間が要素の有効範囲内に存在する場合には,それに対して一つとする。

要素は,これらの名前空間ノードそれぞれの親とするが,名前空間ノードは,親である要素の子とはしな

い。複数の要素は,名前空間ノードを共有しない。ある要素ノードがもう一つの要素ノードと同じでない

場合,ある要素ノードの名前空間ノードは,どれももう一つの要素ノードの名前空間ノードと同じにはな

らない。このことは,要素が次の属性に対して名前空間ノードをもつということを意味している。 

a) 名前がxmlns:で始まり,その要素自体又はより近い祖先要素がその接頭辞を空値で再宣言していない

場合には,その値が空でない,要素及び直近の祖先要素上のあらゆる属性。 

注記 接頭辞を宣言しないことは,[XML Names 1.1]に適合する文書だけで起こりえる。 

b) その要素又は祖先がxmlns属性をもち,直近のそのような要素のxmlns属性の値が空でない場合には,

xmlns属性。 

注記 xmlns=""属性は,既定の名前空間の“取消しを宣言する”(JIS X 4158参照)。  

名前空間ノードは,展開名をもつ。局所部分は,名前空間接頭辞とし(これは,名前空間ノードが既定

の名前空間に対するものの場合,空になる。),名前空間URIは,常にヌルとする。 

名前空間ノードの文字列値は,その名前空間接頭辞に束縛されている名前空間URIとする。XML文書

の中の名前空間宣言に出現している名前空間名が(素片識別子の有無にかかわらず)相対URIとなる場合,

文字列値は,実装依存とする。それら名前空間ノードの文字列値に依存するXPath式は,相互運用可能で

はない。 

5.5 

処理命令ノード 

文書型宣言内部に出現する処理命令を除いて,あらゆる処理命令に対応して処理命令ノードが存在する。 

処理命令は,展開名をもつ。局所部分は,処理命令のターゲットであって,名前空間URIはヌルとする。

処理命令ノードの文字列値は,ターゲット及び空白に続く処理命令の部分とする。終了の ?> は含まない。 

注記 XML宣言は,処理命令とはしない。したがって,XML宣言に対応する処理命令ノードは存在

しない。 

5.6 

コメントノード 

文書型宣言内部に出現するコメントを除いて,あらゆるコメントに対してコメントノードが存在する。 

コメントの文字列値は,開きの <!-- 又は閉じの --> を含まない,コメントの内容とする。 

コメントノードは,展開名をもたない。 

5.7 

テキストノード 

25 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

文字データは,テキストノードにまとめる。できるだけ多くの文字データを各テキストノード内にまと

める。テキストノードは,直前又は直後にテキストノードの兄弟をもつことはない。テキストノードの文

字列値は,文字データとする。テキストノードは,必ず少なくとも1文字のデータをもつ。 

CDATAセクション内にある各文字は,文字データとして扱う。そのため,ソース文書内の <![CDATA[<]]> 

は &lt; と同じに扱う。両者共に,木のテキストノードでは1個の < 文字となる。したがって,CDATA

セクションは,<![CDATA[ 及び ]]> が除去され,< 及び & の出現がそれぞれ &lt; 及び &amp; で置き

換えられたものとして扱われる。文書要素の外の空白は,テキストノードを生成しない。 

注記 < 文字を含むテキストノードがXMLとして書き出されるとき,< 文字は,例えば,&lt; を使

う,又はCDATAセクションの中に含めるとして,別扱いしなければならない。 

コメント,処理命令及び属性値の内部の文字は,テキストノードを生成しない。外部実体内の行末は,

XMLの規格(JIS X 4159)で指定されるとおりに #xA に正規化する。 

テキストノードは,展開名をもたない。 

適合性 

XPathは,主に,他の規定で使用できる構成要素として意図されている。したがって,XPathの実装の適

合性のための判定基準を示すには,([XPointer]及びJIS X 4169といった)XPathを使用する規定に左右さ

れることになるので,XPathの独立した実装のための適合性判定基準を定義することはしない。  

26 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

附属書A 

(規定) 

文献 

序文 

この附属書のA.1は,引用規格について規定する。また,A.2は,参考文献について記載するものであ

って,規定の一部ではない。 

A.1 引用規格(規定) 

IEEE 754  

Institute of Electrical and Electronics Engineers. IEEE Standard for Binary Floating-Point Arithmetic. 

ANSI/IEEE Std 754-1985. 

RFC3986 

T. Berners-Lee, R. Fielding, L. Masinter, Uniform Resource Identifier (URI): Generic Syntax. IETF RFC 3986. 

注記 http://www.ietf.org/rfc/rfc3986.txt を参照。 

RFC3987 

M. Duerst, M. Suignard, Internationalized Resource Identifiers (IRIs) . IETF RFC 3987. 

注記 http://www.ietf.org/rfc/rfc3987.txt を参照。 

XML  

JIS X 4159:2005 拡張可能なマーク付け言語 (XML) 1.0 

注記 World Wide Web Consortium. Extensible Markup Language (XML) 1.0 (Third Edition). W3C 

Recommendation. が,この規格に一致している。 

http://www.w3.org/TR/2004/REC-xml-20040204/を参照。 

XML 1.1  

World Wide Web Consortium. Extensible Markup Language (XML) 1.1. W3C Recommendation. 

注記 http://www.w3.org/TR/xml11/ を参照。 

XML Names  

JIS X 4158:2005 XML名前空間 

注記 World Wide Web Consortium. Namespaces in XML. W3C Recommendation. が,この規格に一致

している。 

http://www.w3.org/TR/REC-xml-names を参照。 

XML Names 1.1  

World Wide Web Consortium. Namespaces in XML 1.1. W3C Recommendation.  

注記 http://www.w3.org/TR/xml-names11/ を参照。 

A.2 参考文献(参考) 

Character Model  

World Wide Web Consortium. Character Model for the World Wide Web. W3C Working Draft.  

注記 http://www.w3.org/TR/WD-charmod を参照。 

27 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

DOM  

World Wide Web Consortium. Document Object Model (DOM) Level 1 Specification. W3C Recommendation. 

注記 http://www.w3.org/TR/REC-DOM-Level-1 を参照。 

JLS  

J. Gosling, B. Joy, and G. Steele. The Java Language Specification.  

注記 http://java.sun.com/docs/books/jls/index.html を参照。 

ISO/IEC 10646 

JIS X 0221:1995 国際符号化文字集合(UCS)−第1部 体系及び基本多言語面 

注記1  ISO/IEC 10646-1:1993, Information technology−Universal Multiple-Octet Coded Character Set 

(UCS) −Part 1: Architecture and Basic Multilingual Plane. International Standard. が,この規格

に一致している。 

注記2  JIS X 0221:1995は,2000年にISO/IEC 10646-1の第2版が発行され,この規格に一致

したJIS X 0221-1:2001に置き換えられている。2003年にISO/IEC 10646, Information 

technology−Universal Multiple-Octet Coded Character Set (UCS)が発行され,この規格,

Amendment 1 (2005)及び Amendment 2 (2006)に対応したJISの作成が進められている。 

TEI  

C.M. Sperberg-McQueen, L. Burnard Guidelines for Electronic Text Encoding and Interchange.  

注記 http://etext.virginia.edu/TEI.html を参照。 

Unicode  

Unicode Consortium. The Unicode Standard.  

注記 http://www.unicode.org/unicode/standard/standard.html を参照。 

XML Infoset  

World Wide Web Consortium. XML Information Set. W3C Recommendation.  

注記 http://www.w3.org/TR/xml-infoset を参照。 

XPointer  

World Wide Web Consortium. XML Pointer Language (XPointer). W3C Working Draft.  

注記 http://www.w3.org/TR/WD-xptr を参照。 

XQL  

J. Robie, J. Lapp, D. Schach. XML Query Language (XQL).  

注記 http://www.w3.org/TandS/QL/QL98/pp/xql.html を参照。 

XSLT  

JIS X 4169:2007,XSL変換 (XSLT) 1.0 

注記 World Wide Web Consortium. XSL Transformations (XSLT). W3C Recommendation. が,この規

格に一致している。 

28 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

附属書B 

(参考) 

XML情報集合との対応付け 

序文 

この附属書は,規定の一部ではない。 

XPathデータモデルにおけるノードは,XML情報集合[XML Infoset]によって提供される次の情報項目か

ら導き出すことができる。 

注記 附属書Bにおける次の記述で,“[××]特性”は,XML情報集合[XML Infoset]において定義さ

れた特性を参照する記法であって,文献参照ではないことに注意する。 

B.1 

ルートノード 

XPathデータモデルのインスタンスは,ただ一つのノードを含み,それは,XML情報集合における一意

の文書情報項目に対応する。 

a) ルートノードの子は,[children]特性の中に見出される情報項目であって,あらゆる文書型宣言情報項

目を省略したものに対応するノードとする。 

B.2 

要素ノード 

要素ノードは,要素情報項目に対応する。 

a) 要素ノードの子は,[children]特性の中に出現する情報項目に対応するノードとする。この対応は,連

続する文字情報項目という子が一つのテキストノードに合体されるので,1対1対応ではない。XPath

データモデルは,すべての一般実体が展開されることを要求するので,非展開実体参照情報項目とい

う子は,決して存在しない。 

b) 要素ノードの属性は,[attributes]特性の中に出現する属性情報項目に対応するノードとする。 

c) 要素ノードの名前空間は,[in-scope namespaces]特性の中に出現する名前空間情報項目に対応するノー

ドとする。 

d) 要素ノードの拡張名の局所部分は,[local name]特性に対応する。要素ノードの拡張名の名前空間URI

は,[namespace name]特性に対応する。 

e) 要素ノードの一意識別子 (ID) は,対応する属性が存在する場合には,IDの[attribute type]特性をもつ

[attributes]特性の中の属性情報項目の[normalized value]特性に対応する。そうでない場合には,ヌルと

する。 

f) 

要素ノードの親は,[parent]特性に対応する。 

B.3 

属性ノード 

属性ノードは,属性情報項目に対応する。名前空間宣言は,属性としてはモデル化しない。 

a) 属性ノードの拡張名の局所部分は,[local name]特性に対応する。属性ノードの拡張名の名前空間URI

は,[namespace name]特性に対応する。 

b) 属性ノードの文字列値は,[normalized value]特性に対応する。 

c) 属性ノードの親は,[owner element]特性に対応する。 

29 

X 4160:2007  

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

B.4 

テキストノード 

テキストノードは,一つ以上の連続する文字情報項目の列に対応する。 

a) テキストノードの文字列値は,文字情報項目の各々の連結された[character code]特性に対応する。 

b) テキストノードの親は,連続する文字情報項目の任意の一つの[parent]特性に対応する。連続する文字

は,常に,同じ親をもつ。 

B.5 

処理命令ノード  

処理命令ノードは,処理命令情報項目に対応する。文書型宣言情報項目の子となる処理命令のための処

理命令ノードは存在しない。 

a) 処理命令ノードの拡張名の局所部分は,[target]特性に対応する。処理命令ノードの拡張名の名前空間

URIは,ヌルとする。 

b) 処理命令ノードの文字列値は,[content]特性に対応する。 

c) 処理命令ノードの親は,[parent]特性に対応する。 

B.6 

コメントノード 

コメントノードは,コメント情報項目に対応する。 

a) コメントノードの文字列値は,[content]特性に対応する。 

b) コメントノードの親は,コメント情報項目の[parent]特性に対応する。 

B.7 

名前空間ノード 

名前空間ノードは,名前空間情報項目に対応する。 

a) 名前空間ノードの拡張名の局所部分は,[prefix]特性に対応する。名前空間ノードの拡張名の名前空間

URIは,ヌルとする。 

b) 名前空間ノードの文字列値は,[namespace name]特性に対応する。 

c) 名前空間ノードの親は,このノードが出現する名前空間の集まりの中の要素ノードとする。 

B.8 

XML情報集合適合性 

この規定は,XML情報集合[XML Infoset]に適合する。次の情報項目は,データモデルのインスタンスを

構成するために情報集合生成器によって開示しなければならない。 

a) [children]特性をもつ文書情報項目。 

b) [children]特性,[attributes]特性,[in-scope namespaces]特性,[local name]特性,[namespace name]特性,

及び[parent]特性をもつ要素情報項目。 

c) [namespace name]特性,[local name]特性,[normalized value]特性,[owner element]特性及び[attribute type]

特性をもつ属性情報項目。 

d) [character code]特性及び[parent]特性をもつ文字情報項目。 

e) [target]特性,[content]特性及び[parent]特性をもつ処理命令情報項目。 

f) 

[content]特性及び[parent]特性をもつコメント情報項目。 

g) [prefix]特性及び[namespace name]特性をもつ名前空間情報項目。 

情報集合生成器によって利用可能なその他の情報項目及び特性は,無視する。