モジュールjava.xml


モジュールjava.xml
XML処理用のJava API (JAXP)を定義します。

JAXP API

JAXPは、XML処理に不可欠な多数のXMLテクノロジおよび標準に基づいて構築された一連のAPIで構成されます。 これには次のAPIが含まれます:

ファクトリおよびプロセッサ

ファクトリは各APIのエントリ・ポイントであり、プロセッサを作成する前にアプリケーションで「JAXPプロパティ」をプログラム的に設定できるメソッドを提供します。 この詳細は、Configurationセクションを参照してください。 ファクトリでは、「JAXPルックアップ・メカニズム」もサポートされています。このアプリケーションでは、JDK実装のかわりに使用するサード・パーティ実装を使用してアプリケーションをデプロイできます

プロセッサは、パーサー(またはリーダー)、直列化機能(またはライター)、バリデータおよびトランスフォーマの集計で、それぞれの領域で処理を制御および実行します。 これらは、関連するパッケージで定義されます。 たとえば、parsersパッケージには、DOMおよびSAXプロセッサを表すDocumentBuilderおよびSAXParserがあります。

プロセッサは、対応するファクトリを使用して構成およびインスタンス化されます。 たとえば、DocumentBuilderおよびSAXParserは、それぞれDocumentBuilderFactoryおよびSAXParserFactoryで構成されます。

構成

JAXPファクトリは、初回起動時に構成プロセスを実行して、使用する実装とその後の動作を決定します。 構成中、ファクトリは「JAXPプロパティ」「システム・プロパティ」「JAXP構成ファイル」などの構成ソースを調査し、「プロパティの優先順位」に続く値を設定します。 用語とプロセスを次に定義します。

JAXPプロパティ

JAXPプロパティは、XMLプロセッサに適用される構成設定です。 プロセッサの動作を制御およびカスタマイズするために使用できます。 使用されているJAXP APIに応じて、JAXPプロパティを「属性、プロパティ」または「機能」と呼びます。

システム・プロパティ

JAXPプロパティに対応するシステム・プロパティを選択し、実行時に、コマンドラインで、または「JAXP構成ファイル」内でプロパティを設定できます。 たとえば、システム・プロパティjavax.xml.catalog.resolveを使用して、CatalogFeaturesのRESOLVEプロパティを設定できます。

システム・プロパティが読み取られる正確な時間は未指定です。 目的の値が適切に適用されるように、アプリケーションでは、最初のJAXPファクトリの作成前にシステム・プロパティが適切に設定されていることを確認し、その後は変更されないようにする必要があります。

構成ファイル

JAXPでは、「JAXPファクトリ用にロードする実装クラスの指定」の構成ファイルの使用と、JAXPプロパティの設定がサポートされています。

構成ファイルはJava Propertiesファイルであり、システム・プロパティと、様々なAPIまたはプロセスで定義された値とのマッピングで構成されます。 次の構成ファイル・エントリは、javax.xml.parsers.DocumentBuilderFactoryおよびCatalogFeatures.RESOLVEプロパティの設定を示しています:

   javax.xml.parsers.DocumentBuilderFactory=packagename.DocumentBuilderFactoryImpl
   javax.xml.catalog.resolve=strict

jaxp.propertiesファイル

デフォルトでは、JAXPは${java.home}/confディレクトリにある構成ファイルjaxp.propertiesを検索し、ファイルが存在する場合は、指定されたプロパティをロードしてXMLファクトリおよびプロセッサの動作をカスタマイズします。

jaxp.propertiesファイルは、JAXP実装の初期化中に1回のみ読み取られ、メモリーにキャッシュされます。 ファイルのアクセスまたは読み取りでエラーが発生した場合、構成ファイルが存在しないかのように構成プロセスが続行されます。

ユーザー定義構成ファイル

jaxp.propertiesファイルに加えて、システム・プロパティjava.xml.config.fileを設定して構成ファイルのロケーションを指定できます。 java.xml.config.fileプロパティが構成ファイルに含まれている場合、そのプロパティは無視されます。

java.xml.config.fileを指定すると、構成ファイルが読み取られ、インクルードされたプロパティによって、jaxp.propertiesファイルに定義されたものと同じプロパティがオーバーライドされます。 JAXP実装の初期化時にjava.xml.config.fileが設定されていない場合、その存在の確認はこれ以上試行されません。

java.xml.config.file値には、構成ファイルへの有効なパス名が含まれている必要があります。 パス名が絶対パスでない場合、JVMの作業ディレクトリに対する相対パスとみなされます。 構成ファイルの読取り中にエラーが発生した場合、java.xml.config.fileプロパティが設定されていないかのように構成プロセスが続行されます。 実装では、オプションで警告メッセージを発行できます。

プロパティの優先順位

JAXPプロパティは、APIメソッド、システム・プロパティおよび「JAXP構成ファイル」など、複数の方法で設定できます。 明示的に設定しない場合、FEATURE_SECURE_PROCESSING (FSP)が有効になると、これらの値はデフォルト値またはより限定的な値で初期化されます。 プロパティの優先順位の構成順序は、最高から最低まで次のとおりです:
  • ファクトリまたはプロセッサのAPI

  • システム・プロパティ

  • User-defined 「構成ファイル」

  • デフォルトのJAXP構成ファイルjaxp.properties

  • JAXPプロパティのデフォルト値。 FSPがtrueの場合、デフォルト値はXMLを安全に処理するように設定されます。

CatalogFeatures ' RESOLVEプロパティを例として使用すると、次のルールがどのように適用されるかを示します:
  • ファクトリAPIまたはプロセッサAPIで指定されたプロパティの優先順位はもっとも高くなります。 次のコードは、他の構成ソースの設定に関係なく、RESOLVEプロパティをstrictに効果的に設定します。

       DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
       dbf.setAttribute(CatalogFeatures.Feature.RESOLVE.getPropertyName(), "strict");
    

  • 前述のコードのようにファクトリにプロパティが設定されていない場合は、システム・プロパティ設定が有効になります。

        // in the following example, the RESOLVE property is set to 'continue'
        // for the entire application
        java -Djavax.xml.catalog.resolve=continue myApp
    

  • プロパティが出荷時に設定されていないか、システム・プロパティを使用している場合は、構成ファイル内の設定が有効になります。 次のエントリは、プロパティを' continue 'に設定します。

        javax.xml.catalog.resolve=continue
    

  • プロパティがどこにも設定されていない場合、そのプロパティはデフォルト値のstrictに解決されます。

JAXPルックアップ・メカニズム

JAXPでは、順序付けされたルックアップ・プロシージャを定義して、JAXPファクトリ用にロードする実装クラスを決定します。 メカニズムをサポートするファクトリを、プロシージャで使用されるメソッド、システム・プロパティおよびシステム・デフォルト・メソッドとともに次の表に示します。
JAXPファクトリ
Factory メソッド システム・プロパティ システム・デフォルト
DatatypeFactory newInstance() javax.xml.datatype.DatatypeFactory newDefaultInstance()
DocumentBuilderFactory newInstance() javax.xml.parsers.DocumentBuilderFactory newDefaultInstance()
SAXParserFactory newInstance() javax.xml.parsers.SAXParserFactory newDefaultInstance()
XMLEventFactory newFactory() javax.xml.stream.XMLEventFactory newDefaultFactory()
XMLInputFactory newFactory() javax.xml.stream.XMLInputFactory newDefaultFactory()
XMLOutputFactory newFactory() javax.xml.stream.XMLOutputFactory newDefaultFactory()
TransformerFactory newInstance() javax.xml.transform.TransformerFactory newDefaultInstance()
SchemaFactory newInstance(schemaLanguage) javax.xml.validation.SchemaFactory:schemaLanguage[1] newDefaultInstance()
XPathFactory newInstance(uri) DEFAULT_PROPERTY_NAME + ":uri"[2] newDefaultInstance()
[1]。ここで、schemaLanguagenewInstance(schemaLanguage)メソッドのパラメータです。

[2]。ここで、urinewInstance(uri)メソッドのパラメータです。

ルックアップ・プロシージャ

「JAXPファクトリ」の実装クラスを検索するための優先順位は、最高から最低までです:
実装上のノート:

JDK組込みカタログ

JDKには、Javaプラットフォームで定義された次のDTDをホストする組込みカタログがあります。

カタログは、最初のJAXPプロセッサ・ファクトリの作成時に1回ロードされます。

組込みカタログを使用した外部リソース解決プロセス

JDKは、必要に応じて組込みカタログを使用してCatalogResolverを作成します。 このCatalogResolverは、デフォルトの外部リソース・リゾルバとして使用されます。

XMLプロセッサは、リゾルバ(EntityResolverXMLResolverCatalogResolverなど)を使用して外部参照を処理できます。 ユーザー定義のリゾルバがない場合、JDK XMLプロセッサはデフォルトのCatalogResolverにフォールバックし、リソースをフェッチする接続を行う前に解決の検出を試行します。 フォールバックは、ユーザー定義のリゾルバが存在するが、リソースを解決できない場合でもプロセスを続行できる場合にも発生します。

デフォルトのCatalogResolverがリソースを検出できない場合、XMLプロセッサに処理を続行するか、リソースをスキップするか、またはCatalogExceptionをスローします。 動作は、jdk.xml.jdkcatalog.resolveプロパティを使用して構成されます。

実装固有のプロパティ

標準の「JAXPプロパティ」に加えて、JDK実装では、プレフィクスとして"jdk.xml."が付いた名前の実装固有のプロパティが多数サポートされています。 これらのプロパティは、Configurationセクションで定義されている構成プロセスにも従います。

JDK実装でサポートされているプロパティのリストは、「実装固有のプロパティ」表を参照してください。

プロセッサのサポート

プロパティは、次の表に示す1つ以上のプロセッサでサポートされる場合があります。 プロパティのタイプに応じて、メソッド1で設定できます: setAttribute/Parameter/Propertyまたは2: 関連する列に示されているsetFeature。
プロセッサ
ID 名前 メソッド1: setAttribute/Parameter/Property メソッド2: setFeature
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.setProperty(name, value);
XPathFactory factory = XPathFactory.newInstance();
factory.setFeature(name, value);
実装固有のプロパティ
氏名 (プレフィクスjdk.xml.) [1] 説明 システム・プロパティ[2] [3] セキュリティ[4] サポートされているプロセッサ[5] 以降[6]
デフォルト Enforced ID setメソッド
jdk.xml.entityExpansionLimit エンティティの展開数を制限します。 yes 整数 正の整数 0以下の値は、制限がないことを示します。 値が整数でない場合、NumberFormatExceptionがスローされます。 64000 64000 はい DOM
SAX
StAX
Validation
Transform
方法1 8
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宣言を書き出すかどうかには影響しません。 boolean true/false false 該当なし No DOMLS 17
jdk.xml.xsltcIsStandalone 「XSLTCシリアライザ」が出力をスタンドアロン文書として扱うことを示します。 このプロパティを使用して、XML宣言のあとに改行を記述できます。 OMIT_XML_DECLARATIONプロパティとは異なり、このプロパティはXML宣言を書き出すかどうかには影響しません。

このプロパティは、「XSLTCシリアライザ」およびその値がStringである点を除き、前述のDOMLSと同様に動作します。

String yesまたはno no 該当なし No XSLTCシリアライザ 17
jdk.xml.cdataChunkSize プロパティがゼロまたは指定されていない場合、またはゼロより大きい場合は複数のチャンクでCDataセクションにデータを返すようにパーサーに指示します。 パーサーは、データを改行で分割し、指定したサイズよりも大きいチャンクをサイズ以下に分割します。 yes 整数 正の整数 0以下の値は、プロパティが指定されていないことを示します。 値が整数でない場合、NumberFormatExceptionがスローされます。 0 該当なし No SAX
StAX
9
jdk.xml.extensionClassLoader XSLTC java拡張関数のロードに使用するnull以外のClassLoaderインスタンスを設定します。 no Object ClassLoaderオブジェクトへの参照。 値が指定されていない場合はNULL。 null 該当なし No Transform 9
jdk.xml.xpathExprGrpLimit XPath式に含めることができるグループの数を制限します。 yes 整数 正の整数 0以下の値は、制限がないことを示します。 値が整数でない場合、NumberFormatExceptionがスローされます。 10 10 はい Transform
XPath
19
jdk.xml.xpathExprOpLimit XPath式に含めることができる演算子の数を制限します。 100 100
jdk.xml.xpathTotalOpLimit XSLスタイル・シート内のXPath演算子の合計数を制限します。 10000 10000 Transform
jdk.xml.enableExtensionFunctions XSLTおよびXPath拡張関数を許可するかどうかを決定します。 yes Boolean trueまたはfalse。 Trueは拡張関数が許可されることを示します。それ以外の場合はFalseです。 true false はい Transform
XPath
方法2 8
jdk.xml.overrideDefaultParser サード・パーティのパーサー実装を使用して、JDK変換、検証およびXPath実装のシステム・デフォルト・パーサーをオーバーライドできます。 trueまたはfalse。 Trueを使用すると、サード・パーティ・パーサー実装を使用して、XML変換、検証またはXPath操作中にシステム・デフォルト実装をオーバーライドできます。 Falseを指定すると、サードパーティのパーサー実装を使用できなくなります。 false false はい Transform
Validation
XPath
方法2 9
jdk.xml.resetSymbolTable 各解析操作時に、パーサーに内部シンボル表をリセットするように指示します。 trueまたはfalse。 Trueは、各解析操作中に、パーサーに関連付けられたSymbolTableを再割当てする必要があることを示します。
Falseは、後続の解析操作でパーサーSymbolTableインスタンスが再利用されることを示します。
false 該当なし No SAX 方法2 9
jdk.xml.dtd.support[7] パーサーに、このプロパティの設定に従ってDTDを処理するように指示します。 オプションは次のとおりです。
  • allow -- パーサーがDTDの処理を続行することを示します。

  • ignore -- パーサーがDTDをスキップすることを示します。

  • deny -- パーサーがエラーとしてDTDを拒否することを示します。 パーサーは、関連する仕様に従ってエラーを報告します。

String allow, ignore, and deny 値では、大文字と小文字は区別されません。 許可 No はい DOM
SAX
StAX
Validation
Transform
方法1 22
jdk.xml.jdkcatalog.resolve 組込みのカタログで外部参照を解決できない場合に、このプロパティの設定に従って動作するようにJDKのデフォルトCatalogResolverに指示します。 オプションは次のとおりです。
  • continue -- 処理を続行する必要があることを示します。

  • ignore -- 参照がスキップされることを示します。

  • strict -- リゾルバがCatalogExceptionをスローすることを示します。

String continue, ignore, and strict 値では、大文字と小文字は区別されません。 continue No はい DOM
SAX
StAX
Validation
Transform
方法1 22

[1]プロパティのフルネームを使用して、プロパティを設定する必要があります。

[2] 値"はい"は、プロパティに対応するシステム・プロパティがあることを示します。それ以外はありません。 システム・プロパティの名前は、プロパティの名前と同じです。

[3] この値は、この表に示すとおり、大/小文字を区別する必要があります。 対応するシステム・プロパティの値は、プロパティ値の文字列表現です。 タイプがブールの場合、システム・プロパティは"true"である場合にのみtrueになります。タイプがStringの場合、システム・プロパティは、正の値(例: xsltcIsStandaloneの場合は"yes")を表す文字列とまったく同じ文字列である場合にのみtrueになります。それ以外の場合はfalseです。 型がIntegerの場合、システム・プロパティの値は、値(例: entityExpansionLimitの場合は"64000")の文字列表現です。

[4] 値"はい"は、プロパティがセキュリティ・プロパティであることを示します。 「プロパティの優先順位」に示されているように、FSPがtrueの場合、列enforcedにリストされている値を使用してこれらのプロパティが初期化されます。

[5] プロパティをサポートする1つ以上のプロセッサ。 IDとSet Methodは、表「プロセッサ」に示されています。

[6] プロパティが導入された初期リリースを示します。

[7] jdk.xml.dtd.supportプロパティは、2つの既存のDTD関連プロパティdisallow-doctype-decl (完全修飾名: http://apache.org/xml/features/disallow-doctype-decl)およびsupportDTD (javax.xml.stream.supportDTD)を補完します。これは、リストされているプロセッサと、JAXP構成ファイルで使用できるシステム・プロパティの統一されたサポートを提供します。 DOMまたはSAXファクトリにdisallow-doctype-declが設定されている場合、またはStAXファクトリにsupportDTDが設定されている場合、jdk.xml.dtd.supportプロパティは無効です。

これら3つのプロパティは、DTDを全体として処理するかどうかを制御します。 拒否または無視するように設定されている場合、DTDの一部または側面を規制する他のプロパティは影響を与えません。

レガシー・プロパティ名 (deprecated)

JDK 17より前のJDKリリースでは、プロパティのURIスタイル・プレフィクスの使用がサポートされています。 これらのレガシー・プロパティ名は、JDK 17の時点でdeprecatedであり、将来のリリースで削除される可能性があります。 新しいプロパティとレガシー・プロパティの両方が設定されている場合は、設定方法や設定場所に関係なく、新しいプロパティ名が優先されます。 したがって、「プロパティの優先順位」で定義されているオーバーライド順序は次のようになります:
  • 新規プロパティ名を使用したファクトリまたはプロセッサの値セット。
  • 「レガシー・プロパティ名」を使用するファクトリまたはプロセッサの値セット
  • Value set as System Property;
  • 構成ファイル内の値セット
  • FEATURE_SECURE_PROCESSING;によって設定された値
  • デフォルト値;

次の表に、プロパティとそれに対応するレガシー名を一覧表示します。

レガシー・プロパティ名 (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

モジュール・グラフ:
java.xmlのモジュール・グラフjava.xmlのモジュール・グラフ
導入されたバージョン:
9