モジュールjava.xml
JAXPルックアップ・メカニズム
JAXPでは、順序付けされたルックアップ・プロシージャを定義して、JAXPファクトリ用にロードする実装クラスを決定します。 メカニズムをサポートするファクトリは、次の表に、プロシージャで使用されるメソッド、システム・プロパティ名、構成ファイルおよびシステム・デフォルト・メソッドとともにリストされています。 [1] ここで、schemaLanguageはnewInstance(schemaLanguage)
メソッドのパラメータです。
[2] ここで、uriはnewInstance(uri)
メソッドのパラメータです。
jaxp.properties
jaxp.properties
は、標準のProperties
形式の構成ファイルで、通常はJavaインストールのconf
ディレクトリにあります。 これには、実装クラスの完全修飾名が含まれ、キーが前述の「表」で定義されたシステム・プロパティ名になります。
jaxp.properties
ファイルは実装によって1回のみ読み取られ、その値は将来の使用のためにキャッシュされます。 最初の読込み時にファイルが存在しないと、そのあとにその存在がチェックされることはない。 初めて読み込まれたプロパティの値は変更できません。
stax.properties
stax.properties
は、StAXファクトリ・ルックアップでのみ使用されることを除き、jaxp.properties
と同じ機能を持つ構成ファイルです。
ルックアップ・プロシージャ
「JAXPファクトリ」は、次に示す手順に従って実装クラスを特定およびロードします:- 前述の表「JAXPファクトリ」のシステム・プロパティ列の説明に従って、システム・プロパティを使用します。
-
表「JAXPファクトリ」に示すように、構成ファイルjaxp.propertiesを使用します。 StAXの場合、stax.propertiesが存在する場合、ファクトリはまずjaxp.propertiesではなく読取りを試行します。
-
ServiceLoader
クラスで定義されているサービス・プロバイダ・ローディング機能を使用して、デフォルトのロード・メカニズムを使用してサービスの実装を特定してロード: サービス・プロバイダ・ローディング機能は、現在のスレッド・コンテキスト・クラス・ローダーを使用してサービスをロードしようとします。 コンテキスト・クラス・ローダーがnullの場合、システム・クラス・ローダーが使用されます。SchemaFactory
SchemaFactory
の場合、メソッドisSchemaLanguageSupported(String schemaLanguage)
を実装するには、潜在的な各サービス・プロバイダが必要です。 指定されたスキーマ言語をサポートする最初に検出されたサービス・プロバイダが返されます。XPathFactory
XPathFactory
の場合、メソッドisObjectModelSupported(String objectModel)
を実装するには、潜在的な各サービス・プロバイダが必要です。 指定されたオブジェクト・モデルをサポートする最初に検出されたサービス・プロバイダが返されます。 -
それ以外の場合、
system-default
実装が返されます。これは、前述の表「JAXPファクトリ」のシステム・デフォルト列に示すように、newDefaultInstance() or newDefaultFactory()
メソッドをコールすることと同じです。SchemaFactory
SchemaFactory
の場合、W3C XMLスキーマには「プラットフォームのデフォルト」SchemaFactory
が必要です。XPathFactory
XPathFactory
の場合、W3C DOMには「プラットフォームのデフォルト」XPathFactory
が必要です(DEFAULT_OBJECT_MODEL_URI
)。
- 実装上のノート:
実装固有の機能およびプロパティ
このモジュールのパブリックAPIに記述された標準の機能やプロパティに加えて、JDK実装では、実装固有の多くの機能とプロパティがサポートされています。 このセクションでは、ネーミング規則、システム・プロパティ、jaxp.properties、スコープと順序、およびプロパティが適用されるプロセッサについて説明します。 現在実装でサポートされている実装固有の機能およびプロパティの一覧表については、このノートを参照してください。ネーミング規則
機能およびプロパティの名前は、プレフィクスと名前で構成される完全修飾名になります。接頭辞
JDKの機能とプロパティのプレフィクス、および対応するシステム・プロパティ(存在する場合)の定義は次のとおりです:jdk.xml.
名前
名前は、大文字と小文字が区別される1つまたは複数の単語で構成されます。 最初の単語のすべての文字は小文字ですが、後続の単語の最初の文字は大文字で始まります。XML文書がスタンドアロンであるかどうかを示すプロパティの例は、次のような形式になります:
jdk.xml.isStandalone
jdk.xml.isStandalone
システム・プロパティ
プロパティは、同じ名前の対応するシステム・プロパティを持つことができます。 システム・プロパティはプロセッサを作成する前に設定する必要があり、あとでクリアできます。jaxp.properties
jaxp.propertiesファイルでシステム・プロパティを指定して、JDKのすべての呼出しの動作を設定できます。 形式はsystem-property-name=value
です。 たとえば、jdk.xml.isStandalone=true
スコープとオーダー
DOM、SAX、スキーマ検証、XSLTおよびXPathを含むXMLプロセッサには、XMLConstants.FEATURE_SECURE_PROCESSING
機能(今後、セキュア処理と呼ばれます)が必要です。 セキュア処理がtrueに設定されている場合は、表「実装固有の機能」およびPropertiesの"security: yes"
(この後、セキュリティ・プロパティと呼ばれます)としてフラグ設定されたようなセキュリティ関連の機能とプロパティが適用されます。 このような強制には、表の"Value"
のサブ列"Enforced"
に示されているように、セキュリティ・プロパティおよび機能をより限定的な値と制限値に設定することが含まれます。 ただし、セキュア処理がfalseに設定されている場合、プロパティ値は影響を受けません。Java Security Managerが存在する場合は、セキュア処理がtrueに設定され、オフにできません。 そのため、セキュリティ・プロパティが実施されます。
jaxp.propertiesファイルで指定されたプロパティは、JDKのすべての呼出しに影響し、デフォルト値、またはセキュア処理によって設定された値を上書きします。
システム・プロパティは、設定するとJDKの起動に影響し、デフォルト設定やjaxp.propertiesまたはセキュア処理で設定された可能性のある設定を上書きします。
JAXPファクトリまたはプロセッサによって指定されるJAXPプロパティは、(例: SAXParser)によって、システム・プロパティ、jaxp.propertiesファイル、およびセキュア処理が優先されます。
プロセッサのサポート
機能とプロパティは、1つ以上のプロセッサでサポートされる可能性があります。 次の表に、参照に使用できるID別にプロセッサを一覧表示します。プロセッサ ID 名前 プロパティを設定する方法 機能を設定する方法 DOM DOMパーサー DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setAttribute(name, value);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setFeature(name, value);
SAX SAXパーサー SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser parser = spf.newSAXParser();
parser.setProperty(name, value);
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setFeature(name, value);
StAX StAXパーサー XMLInputFactory xif = XMLInputFactory.newInstance();
xif.setProperty(name, value);
XMLInputFactory xif = XMLInputFactory.newInstance();
xif.setProperty(name, value);
Validation XML Validation API SchemaFactory schemaFactory = SchemaFactory.newInstance(schemaLanguage);
schemaFactory.setProperty(name, value);
SchemaFactory schemaFactory = SchemaFactory.newInstance(schemaLanguage);
schemaFactory.setFeature(name, value);
変換 XML Transform API TransformerFactory factory = TransformerFactory.newInstance();
factory.setAttribute(name, value);
TransformerFactory factory = TransformerFactory.newInstance();
factory.setFeature(name, value);
XSLTCシリアライザ XSLTCシリアライザ Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(name, value);
DOMLS DOM Load and Save LSSerializer serializer = domImplementation.createLSSerializer();
serializer.getDomConfig().setParameter(name, value);
XPath XPath 該当なし XPathFactory factory = XPathFactory.newInstance();
factory.setFeature(name, value);
実装固有の機能およびプロパティ
実装固有の機能およびプロパティには、API仕様に準拠しながらリソースに関する制限を管理できるJDKの選択肢が反映されています。また、アプリケーションでは、標準に必要な動作以外に動作を変更できます。次の表に、JDKで現在サポートされている実装固有のプロパティを示します。 必要に応じて、将来的にプロパティを追加できます。
実装固有のプロパティ フル・ネーム (プレフィクス+名前) [1] 説明 APIプロパティ [2] システム・プロパティ [3] jaxp.properties [3] 値[4] セキュリティ [5] サポートされるプロセッサ [6] 以降 [7] 型 値 デフォルト Enforced jdk.xml.entityExpansionLimit
エンティティの展開数を制限します。 yes yes yes 整数 正の整数 0以下の値は、制限がないことを示します。 値が整数でない場合、NumberFormatExceptionがスローされます。 64000 64000 はい DOM
SAX
StAX
Validation
Transform8 jdk.xml.elementAttributeLimit
1つの要素で使用できる属性の数を制限します。 10000 10000 jdk.xml.maxOccurLimit
"制限なし"以外の値を持つmaxOccurs属性を含むW3C XMLスキーマの文法を作成するときに作成できるコンテンツ・モデル・ノードの数を制限します。 5000 5000 jdk.xml.totalEntitySizeLimit
一般エンティティとパラメータ・エンティティを含むすべてのエンティティの合計サイズを制限します。 サイズはすべてのエンティティの集約として計算されます。 5x10^7 5x10^7 jdk.xml.maxGeneralEntitySizeLimit
すべての一般エンティティの最大サイズを制限します。 0 0 jdk.xml.maxParameterEntitySizeLimit
複数のパラメータ・エンティティのネストの結果を含む、パラメータ・エンティティの最大サイズを制限します。 10^6 10^6 jdk.xml.entityReplacementLimit
すべてのエンティティ参照のノードの合計数を制限します。 3x10^6 3x10^6 jdk.xml.maxElementDepth
要素の最大の深さを制限します。 0 0 jdk.xml.maxXMLNameLimit
要素名、属性名、名前空間の接頭辞やURIなど、XML名の最大サイズを制限します。 1000 1000 jdk.xml.isStandalone
シリアライザが出力をスタンドアロン文書として扱うことを示します。 このプロパティを使用して、XML宣言のあとに改行を記述できます。 xml-declaration
プロパティとは異なり、このプロパティはXML宣言を書き出すかどうかには影響しません。yes yes yes boolean true/false false 該当なし No DOMLS 17 jdk.xml.xsltcIsStandalone
「XSLTCシリアライザ」が出力をスタンドアロン文書として扱うことを示します。 このプロパティを使用して、XML宣言のあとに改行を記述できます。 OMIT_XML_DECLARATION
プロパティとは異なり、このプロパティはXML宣言を書き出すかどうかには影響しません。このプロパティは、「XSLTCシリアライザ」およびその値がStringである点を除き、前述のDOMLSと同様に動作します。
yes yes yes String yesまたはno no 該当なし No XSLTCシリアライザ 17 jdk.xml.cdataChunkSize
プロパティがゼロまたは指定されていない場合、またはゼロより大きい場合は複数のチャンクでCDataセクションにデータを返すようにパーサーに指示します。 パーサーは、データを改行で分割し、指定したサイズよりも大きいチャンクをサイズ以下に分割します。 yes yes yes 整数 正の整数 0以下の値は、プロパティが指定されていないことを示します。 値が整数でない場合、NumberFormatExceptionがスローされます。 0 該当なし No SAX
StAX9 jdk.xml.extensionClassLoader XSLTC java拡張関数のロードに使用するnull以外のClassLoaderインスタンスを設定します。 yes no no Object ClassLoaderオブジェクトへの参照。 値が指定されていない場合はNULL。 null 該当なし No Transform 9 jdk.xml.xpathExprGrpLimit XPath式に含めることができるグループの数を制限します。 Transform:yes
XPath:noyes yes 整数 正の整数 0以下の値は、制限がないことを示します。 値が整数でない場合、NumberFormatExceptionがスローされます。 10 10 はい Transform
XPath19 jdk.xml.xpathExprOpLimit XPath式に含めることができる演算子の数を制限します。 100 100 jdk.xml.xpathTotalOpLimit XSLスタイル・シート内のXPath演算子の合計数を制限します。 yes 10000 10000 Transform
次の表に、JDKで現在サポートされている実装固有の機能を示します。 必要に応じて、将来的にさらなる機能を追加できます。
実装固有の機能 フル・ネーム (プレフィクス+名前) [1] 説明 APIプロパティ [2] システム・プロパティ [3] jaxp.properties [3] 値[4] セキュリティ [5] サポートされるプロセッサ [6] 以降 [7] 型 値 デフォルト Enforced jdk.xml.enableExtensionFunctions
XSLTおよびXPath拡張関数を許可するかどうかを決定します。 yes yes yes Boolean trueまたはfalse。 Trueは拡張関数が許可されることを示します。それ以外の場合はFalseです。 true false はい Transform
XPath8 jdk.xml.overrideDefaultParser
サード・パーティのパーサー実装を使用して、JDK変換、検証およびXPath実装のシステム・デフォルト・パーサーをオーバーライドできます。 trueまたはfalse。 Trueを使用すると、サード・パーティ・パーサー実装を使用して、XML変換、検証またはXPath操作中にシステム・デフォルト実装をオーバーライドできます。 Falseを指定すると、サードパーティのパーサー実装を使用できなくなります。 false false はい Transform
Validation
XPath9 jdk.xml.resetSymbolTable
各解析操作時に、パーサーに内部シンボル表をリセットするように指示します。 trueまたはfalse。 Trueは、各解析操作中に、パーサーに関連付けられたSymbolTableを再割当てする必要があることを示します。
Falseは、後続の解析操作でパーサーSymbolTableインスタンスが再利用されることを示します。false 該当なし No SAX 9 [1] プロパティのフルネームを使用して、プロパティを設定する必要があります。
[2] 値"yes"は、このプロパティをプロセッサまたはファクトリで設定できることを示します。それ以外の場合も設定しません。
[3] 値"yes"は、プロパティに対応するシステム・プロパティがあることを示します。それ以外はありません。
[4] この値は、この表に示すとおり、大/小文字を区別する必要があります。 対応するシステム・プロパティの値は、プロパティ値の文字列表現です。 タイプがブールの場合、システム・プロパティは"true"である場合にのみtrueになります。タイプがStringの場合、システム・プロパティは、正の値(例:
xsltcIsStandalone
の場合は"yes")を表す文字列とまったく同じ文字列である場合にのみtrueになります。それ以外の場合はfalseです。 型がIntegerの場合、システム・プロパティの値は、値(例:entityExpansionLimit
の場合は"64000")の文字列表現です。[5] 値"yes"は、プロパティがセキュリティ・プロパティであることを示します。 セキュア処理がセキュリティ・プロパティの値に与える影響については、「スコープと順序」を参照してください。
[6] プロパティをサポートする1つ以上のプロセッサ。 フィールドの値は、表「プロセッサ」で説明されているIDです。
[7] プロパティが導入された初期リリースを示します。
レガシー・プロパティ名 (非推奨)
JDK 17より前のJDKリリースでは、プロパティのURIスタイル・プレフィクスの使用がサポートされています。 これらのレガシー・プロパティ名は、JDK 17の時点でdeprecatedであり、将来のリリースで削除される可能性があります。 新しいプロパティとレガシー・プロパティの両方が設定されている場合は、設定方法や設定場所に関係なく、新しいプロパティ名が優先されます。 「スコープとオーダー」で定義されたオーバーライド順序は降順になります:- デフォルト値;
- FEATURE_SECURE_PROCESSING;によって設定された値
- Value set in jaxp.properties;
- Value set as System Property;
- 「レガシー・プロパティ名」を使用するファクトリまたはプロセッサの値セット
- 新規プロパティ名を使用したファクトリまたはプロセッサの値セット。
次の表に、プロパティとそれに対応するレガシー名を一覧表示します。
レガシー・プロパティ名 (17以降非推奨) プロパティ レガシー・プロパティ名 jdk.xml.entityExpansionLimit
http://www.oracle.com/xml/jaxp/properties/entityExpansionLimit
jdk.xml.elementAttributeLimit
http://www.oracle.com/xml/jaxp/properties/elementAttributeLimit
jdk.xml.maxOccurLimit
http://www.oracle.com/xml/jaxp/properties/maxOccurLimit
jdk.xml.totalEntitySizeLimit
http://www.oracle.com/xml/jaxp/properties/totalEntitySizeLimit
jdk.xml.maxGeneralEntitySizeLimit
http://www.oracle.com/xml/jaxp/properties/maxGeneralEntitySizeLimit
jdk.xml.maxParameterEntitySizeLimit
http://www.oracle.com/xml/jaxp/properties/maxParameterEntitySizeLimit
jdk.xml.entityReplacementLimit
http://www.oracle.com/xml/jaxp/properties/entityReplacementLimit
jdk.xml.maxElementDepth
http://www.oracle.com/xml/jaxp/properties/maxElementDepth
jdk.xml.maxXMLNameLimit
http://www.oracle.com/xml/jaxp/properties/maxXMLNameLimit
jdk.xml.isStandalone
http://www.oracle.com/xml/jaxp/properties/isStandalone
jdk.xml.xsltcIsStandalone
http://www.oracle.com/xml/is-standalone
http://www.oracle.com/xml/jaxp/properties/xsltcIsStandalone
jdk.xml.extensionClassLoader
jdk.xml.transform.extensionClassLoader
jdk.xml.enableExtensionFunctions
http://www.oracle.com/xml/jaxp/properties/enableExtensionFunctions
- モジュール・グラフ:
- 導入されたバージョン:
- 9
-
パッケージ
エクスポートパッケージ説明XML処理の定数を定義します。「XMLカタログOASIS Standard V1.1、2005年10月7日」を実装するためのクラスを提供します。XML/Java型マッピングを定義します。XMLネームスペースの処理を定義します。SAX (XML用シンプルAPI)パーサーまたはDOM (ドキュメント・オブジェクト・モデル)ドキュメント・ビルダーを使用してXMLドキュメントを処理するためのクラスを提供します。Streaming API for XML (StAX)のインタフェースとクラスを定義します。Streaming API for XML (StAX)のイベント・インタフェースを定義します。Streaming API for XML (StAX)のユーティリティ・クラスを提供します。変換命令の処理、およびソースから結果への変換を実行するための汎用APIを定義します。DOM固有の変換クラスを提供します。SAX固有の変換クラスを提供します。StAX固有の変換クラスを提供します。ストリームおよびURIに固有の変換クラスを提供します。XML文書の検証のためのAPIを提供します。XPath式の評価と評価環境へのアクセス用の「オブジェクトモデル・ニュートラル」 APIを提供します。Document Object Model (DOM)のインタフェースを提供します。DOMImplementation
のインスタンスを取得するためのファクトリを提供します。DOM Level 2イベントのインタフェースを提供します。DOM Level 3の読み込みと保存のためのインタフェースを提供します。DOM Level 2 Rangeのインタフェースを提供します。DOM Level 2 Traversalのインタフェースを提供します。DOM Level 2 Viewsのインタフェースを提供します。XML (SAX)のシンプルAPIのインタフェースを提供します。適合するSAXドライバが必ずしもサポートしないSAX2機能へのインタフェースを提供します。SAXベースのアプリケーションのブートストラップをサポートするなど、ヘルパー・クラスを提供します。 -
サービス
使用型説明XMLをJavaObject
へ、あるいはJava Objectからマップする新しいjavax.xml.datatype
Object
を作成するファクトリです。アプリケーションでXMLドキュメントからDOMオブジェクト・ツリーを生成するパーサーを取得できるファクトリAPIを定義します。アプリケーションがSAXベースのパーサーを構成および取得してXMLドキュメントを構文解析できるようにするファクトリAPIを定義します。Schema
オブジェクトを作成するファクトリです。TransformerFactoryインスタンスを使用して、Transformer
およびTemplates
オブジェクトを作成できます。このインタフェースは、XMLEventのインスタンスを作成するためのユーティリティ・クラスを定義します。ストリームを取得するためのファクトリの抽象実装を定義します。XMLEventWriterおよびXMLStreamWriterを取得するためのファクトリの抽象実装を定義します。コールバックを使ってXML文書を読み取るためのインタフェースです。XPathFactory
インスタンスを使用して、XPath
オブジェクトを作成できます。