Hitachi

Cosminexus V11 アプリケーションサーバ Cosminexus XML Processor ユーザーズガイド


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文字)

(e) エンティティによって置き換えられる文字列や参照されるファイルにあるノード数

エンティティによって置き換えられる文字列や参照されるファイルに次のオブジェクトが含まれる場合,その数をノード数として制限します。

XML解析処理で制限値を超えた場合のエラー通知(fatalErrorイベント)または例外発生時のエラーメッセージはKECX01235-Eエラーとなります。

  • 要素タグ

  • 要素内容

  • 属性

  • 処理命令

  • コメント

  • CDATAセクション

  • エンティティの参照

エンティティによって置き換えられる文字列や参照されるファイルにあるノード数を制限するXML例を次に示します。

例1 エンティティによって置き換えられる文字列や参照されるファイルにあるノード数の制限のXML例(test.xml)

<?xml version="1.0" ?>
<!DOCTYPE root[
  <!ELEMENT root ANY >
  <!ENTITY GE1 SYSTEM "external.xml">
]>
<root>&GE1;</ root>

例2 エンティティによって置き換えられる文字列や参照されるファイルにあるノード数の制限のXML例(external.xml)

<xmlFile>
  <filler1>example</filler1>
  <filler1 attr="abc">example</filler1>
  <!-- comment -->
  <![CDATA[ cdata section ]]>
   ・・・
</xmlFile> 

上記XML例では,参照しているエンティティGE1(外部エンティティ参照によって読み込んだexternal.xml)に含まれる要素タグ(xmlFile要素やfilter1要素),要素内容(filter1要素の間にある"example")などのオブジェクトの数をノード数としてチェックします。

(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の指定によって内部のカウンタが制限値を超える場合エラーとなります。

(3) XML名の文字列長

要素および属性のプレフィックスやローカル名,名前空間URIの文字列長を制限する機能を提供します。XML解析処理で制限値を超えた場合のエラー通知(fatalErrorイベント)または例外発生時のエラーメッセージはKECX01234-Eエラーとなります。XML名の文字列長の制限に該当するXMLの例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <prefix:localname xmlns:prefix="http://www.hitachi.co.jp/xmlp/sample/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz"/>
</root>

上記XML例は,XML名の一つである名前空間URIの文字列長が長い場合の例です。この例のように,XML名に長い文字列を指定した場合エラーとなります。

(4) XPath式に関する制限

XPath式のコンパイル時にXPath式に対する制限をする機能を提供します。制限する項目を次に示します。

(a) XPath式に含まれるグループの数

XPath式に含まれるグループの数を制限します。XPath式に含まれるグループの数が制限値を超えた場合,XPath式のコンパイルをする機能によって,次の表の動作になります。

表3‒15 XPath式に含まれるグループの数が制限値を超えた場合の動作

機能

動作

XPath式を評価するためのAPI

KECX03139-Eのエラーメッセージを含む例外をスローします。

XSLTトランスフォーマ機能

KECX02267-Eのエラーメッセージを含む例外をエラー通知(fatalErrorイベント)します。

XSLTCトランスフォーマ機能

KECX07107-Eのエラーメッセージを含む例外をエラー通知(fatalErrorイベント)します。

グループが含まれるXPath式の例を次に示します。

(((((child::*)|(child::*)|(child::*))|((child::*)|(child::*)|(child::*)))))

上記XPath式の例ではグループの数は11個となります。

(b) XPath式に含まれる演算子の数

1つのXPath式に含まれる演算子の数を制限します。XPath式に含まれる演算子の数が制限値を超えた場合,XPath式のコンパイルをする機能によって,次の表の動作になります。

表3‒16 XPath式に含まれる演算子の数が制限値を超えた場合の動作

機能

動作

XPath式を評価するためのAPI

KECX03140-Eのエラーメッセージを含む例外をスローします。

XSLTトランスフォーマ機能

KECX02268-Eのエラーメッセージを含む例外をエラー通知(fatalErrorイベント)します。

XSLTCトランスフォーマ機能

KECX07108-Eのエラーメッセージを含む例外をエラー通知(fatalErrorイベント)します。

演算子が含まれるXPath式の例を次に示します。

x >= 90.00 and y <= 9.0 and x >= 90.00 and y <= 9.0

上記XPath式の例では演算子の数は7個となります。

(c) XPath式に含まれる演算子の総数

XSLTトランスフォーマおよびXSLTCトランスフォーマの場合,解析するスタイルシートに記述された複数のXPath式に含まれる演算子の総数(総和)を制限します。解析するスタイルシートに記述された複数のXPath式に含まれる演算子の総数が制限値を超えた場合,スタイルシートの解析をした機能によって,次の表の動作になります。

表3‒17 XPath式に含まれる演算子の総数が制限値を超えた場合の動作

機能

動作

XSLTトランスフォーマ機能

KECX02269-Eのエラーメッセージを含む例外をエラー通知(fatalErrorイベント)します。

XSLTCトランスフォーマ機能

KECX07109-Eのエラーメッセージを含む例外をエラー通知(fatalErrorイベント)します。

(d) XPath式に関する制限の互換用システムプロパティ

(a)〜(c)に示したXPath式に関する制限で動作が変化することによる影響を考慮し,XPath式に関する制限の動作を変更する互換用システムプロパティを提供します。提供するシステムプロパティを次の表に示します。

表3‒18 XPath式に関する制限の互換用システムプロパティ

システムプロパティ名

内容

com.cosminexus.jaxp.secure_processing.xpath_limit.compatible

(a)〜(c)に示したXPath式に関する制限を無効にします。

true(デフォルト)

(a)〜(c)に示したXPath式に関する制限を有効にします。

false

注※

小文字の"false"以外の値は,すべて"true"を指定したものとして扱います。