3.8.3 制限できる項目
この機能で制限できる項目を次に示します。これらの項目は制限値を変更できます。
- 〈この項の構成〉
(1) エンティティに関する制限
XMLPではエンティティ展開時に制限をする機能を提供します。制限する項目を次に示します。
-
エンティティ参照の展開回数
-
一般エンティティの文字列長
-
パラメータエンティティの文字列長
-
一般エンティティとパラメータエンティティの展開後の文字列長の合計
(a) エンティティ参照の展開回数
エンティティ参照の展開回数を制限します。XML解析処理で制限値を超えた場合のエラー通知(fatalErrorイベント)または例外発生時のエラーメッセージはKECX01225-Eエラーとなります。
エンティティ参照の展開回数を制限するXML例を次に示します。
<!DOCTYPE root [ <!ENTITY x3 "abc"> <!ENTITY x2 "&x3;&x3;"> <!ENTITY x1 "&x2;&x2;"> ]> <root>&x1;</root>
上記XML例ではエンティティ参照の展開回数は&x1; &x2; &x3; &x3; &x2; &x3; &x3;の7回となります。
(b) 一般エンティティの文字列長
一般エンティティ実体の文字列長を制限します。XML解析処理で制限値を超えた場合のエラー通知(fatalErrorイベント)または例外発生時のエラーメッセージはKECX01232-Eエラーとなります。
一般エンティティの文字列長を制限するXML例を次に示します。
<!DOCTYPE root [ <!ENTITY GE4 "hijk"> <!ENTITY GE3 "abcd"> <!ENTITY GE2 "efgh&GE3;ijk"> <!ENTITY GE1 "lmn"> ]> <root>&GE1;&GE2;</root>
上記XML例ではエンティティ参照しているエンティティGE1やGE2について”lmn”(3文字),GE3展開後の”efghabcdijk”(11文字)の文字列長をチェックします。GE3だけのチェックはしません。参照していないGE4についてはチェックされません。
(c) パラメータエンティティの文字列長
パラメータエンティティ展開後の文字列長を制限します。XML解析処理で制限値を超えた場合のエラー通知(fatalErrorイベント)または例外発生時のエラーメッセージはKECX01232-Eエラーとなります。
パラメータエンティティの文字列長を制限するXML例を次に示します。
<!ENTITY % PE2 "abcd"> <!ENTITY % PE1 "%PE2;efgh"> <!ENTITY GE1 "ij"> <!ENTITY % PEG1 "&GE1;klmn"> <!ENTITY % PEEXT SYSTEM "ext.xml">
上記XML例では,エンティティPE1はPE2のパラメータエンティティ展開後の”abcdefgh”(8文字)の文字列長を,PE2は“abcd”(4文字)の文字列長をチェックします。エンティティPEG1は一般エンティティGE1を参照しますが,パラメータエンティティから一般エンティティへの参照は展開されず,”&GE1;klmn”(9文字)の文字列長をチェックします。参照されていない外部パラメータエンティティPEEXTのチェックはしません。
(d) 一般エンティティとパラメータエンティティの展開後の文字列長の合計
一般エンティティとパラメータエンティティの展開後のすべての文字列長の合計の値を制限します。XML解析処理で制限値を超えた場合のエラー通知(fatalErrorイベント)または例外発生時のエラーメッセージはKECX01233-Eエラーとなります。
一般エンティティとパラメータエンティティの展開後の文字列長の合計を制限するXML例を次に示します。
<!ENTITY GE3 "abcd"> <!ENTITY GE2 "efgh&GE3;ijk"> <!ENTITY GE1 "lmn"> <!ENTITY % PE2 "abcd"> <!ENTITY % PE1 "%PE2;efgh">
上記XML例では, GE1,GE2だけが参照されている場合,参照されている一般エンティティGE1,GE2と定義されているパラメータエンティティPE1,PE2の展開後の文字列長の合計となるため次のとおり26となります。
-
GE1:”lmn”(3文字)
-
GE2:”efghabcdijk”(11文字)
-
PE1:”abcdefgh”(8文字)
-
PE2:”abcd”(4文字)
(2) XMLスキーマの内容モデルに関する制限
XMLスキーマの内容モデルで作成されるノードの最大数を制限する機能を提供します。XML解析処理で制限値を超えた場合のエラー通知(fatalErrorイベント)または例外発生時のエラーメッセージはKECX06248-Eエラーとなります。XMLスキーマの内容モデルで作成されるノードの最大数を制限するXMLスキーマ例を次に示します。
<xsd:complexType> <xsd:sequence maxOccurs="2"> <xsd:element name="child" maxOccurs="1500"/> </xsd:sequence> </xsd:complexType>
上記例のとおりXMLスキーマの複合型の大域定義(一番外側に定義された<xsd:complexType>)に対しmaxOccursに大きな値を指定した場合エラーとなります。ただし,maxOccursに制限値より小さな値の場合でもネストの深さやその他のmaxOccursの指定によって内部のカウンタが制限値を超える場合エラーとなります。