XSLTをいじる必要に駆られて、現在Java1.4+JAXP1.1を利用しています。
いままで、javax.xml.transformをimportしてメソッドを実行するだけで、「変換系に何を使っているのか」については全く気にしていなかったのですが、その実体は何なのでしょうか?
(XTとかXalanとか、単体の変換系がありますよね・・・?)
また、DOMパーサ、SAXパーサもJAXPで使えますが、各々のパーサや変換系を集めてパッケージにしたものがJAXPなんでしょうか。
さらに、勉強中にXMLパーサという単語が出てきて混乱しています。XMLパーサは、DOM・SAX・XSLT等とは違うのでしょうか?
(XMLパーサと名乗っているXercesは何に使うのでしょうか・・・)
DTDとの関連も含めて解説して頂けたら嬉しいです。
No.1
- 回答日時:
1.JAXPとは
W3CのDOM仕様ではXML操作のAPIは定められていましたが、その手前の
Documentオブジェクトを構築するところまでは定義されていなくて、
処理系毎にばらばらでした。
そこも含めて、統一したAPIを策定したのがJAXPです。
ということで、JAXPを用いると、利用者は各処理系に何が使われているかをプログラムソース上では意識せずに記述できます。
2.XercesはXMLパーサの処理系実体です。
3.XMLパーサはXMLの内容を解析する処理を行います。
解析には、DOM系APIとSAX系APIがあり、処理系には、Xerces等があります。
XSLTプロセサはXML文書をスタイルシートに基づいて変換を行うもので、処理系には、Xalan等があります。
No.2
- 回答日時:
こんにちは。
stardustと申します。先に回答されている方の内容は的確に説明されていて素晴らしいと思います。
大いに参考になります。
さて、少しだけ補足しますと、
JAXPと言うのは、あくまでXML処理系にアクセスするためのインタフェースを提供するもので、実際に処理するにはXerces等のXMLパーサや、Xalan等のXSLTプロセッサが必要になります。
特に意識されていないかもしれませんが、JDK1.4を使っていると言うことは、おそらくJDK組込みのもので、XMLパーサとしては「Xerces」、XSLTプロセッサとしては「Xalan」を使用しているはずです。
(JDKのバージョンによって違いがあるかもしれませんが、ここで強調したいのはJAXPというインタフェースを通して、XMLパーサとXSLTプロセッサにアクセスしているということです。)
ちなみに、Xercesは「ザーシズ」、Xalanは「ザラン」と一般的に読むそうです。
補足、ありがとうございます。ということは、意識しないままにXercesやXalanを使っていたんですね。(別物かと思って、新規に入れようとしていました(^^;)
ということは、XML Schemaを適用したい場合などは、パーサであるXercesの機能を使えばいいのでしょうか(すみません、もう一度ドキュメントよく読んでみます)。
No.3ベストアンサー
- 回答日時:
stardustです。
ちょっと自信が無かったので回答を控えていたのですが、他の回答が出ていないようなので回答しておきます。
私の認識に誤りがあるかもしれませんのでご注意下さい。
調査の参考にして頂ければと思います。
DTDとは Document Type Definition の略で、文書の内容を定義するものです。
例えば、「履歴書」の文書で「資格」欄は資格の名称を文字列で記述する。「生年月日」欄は生年月日を日付で記述する。などの決まりを定義するような用途で使用します。
XML SchemaはDTDの記述をXMLの形式で記述でき、また更に複雑な定義をできるようにしたものです。
XML文書の定義自体をXMLで記述するわけです。
これらのDTDやXML Schemaに則っているか、XML文書の検証を行うには、Factory(DOMならばDocumentBuilderFactory、SAXならばSAXParserFactory)のsetValidating()メソッドで検証をするように指定して、Parserのインスタンスを生成すれば良いようです。
XSLTの場合は、、、
どうなるんでしょう?
すいませんが、XSLTを使用したことが無いので判りません。
書物を参考に、XercesのSAXParserFactoryを使ってパーサを生成し、検証を行うことができました。なるほど、あらかじめValidateするとか、XML Schemaを適用するとかをsetFeature等で指定しておき、Parseすることで検証が実行されるのですね。非常に参考になりました。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- XML XML同じ名前の要素を自動で集約するツール 1 2022/04/11 09:21
- 数学 この数学問題、スマートに解く方法を教えてください。 3 2023/01/26 23:17
- アプリ おすすめのパスワード管理アプリを教えてください。(iOSとWindows対応) 4 2023/01/19 02:08
- WordPress(ワードプレス) ワードプレスにて .xmlファイルの使い方をご存知の方、よろしくお願いいたします。 2 2022/09/30 00:55
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- その他(IT・Webサービス) 見たことのない形式で日付が表示されているのでそれを解析してほしい 3 2023/01/23 16:53
- AJAX 自作の地図をグーグルマップのようにしたい 3 2022/11/15 11:53
- フリーソフト Windowsの特殊文字を削除や変換したい そんなフリーソフトはありますか? 3 2022/11/09 00:05
- 計算機科学 化学の問題です。 3 2022/07/09 00:11
- フリーソフト フォルダ、ファイル名の一括変換について 3 2023/03/16 09:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
String型の日付(2005/11/25)の...
-
C# マルチスレッドにおける例外...
-
VBA Evaluate関数 型が一致しま...
-
子プロセスで発生した例外を親...
-
ブックマークレットについて
-
nullで、return出来るのはどん...
-
例外ってIf文の中に入れますか...
-
C++の例外処理について
-
【JAVA】与えられた金額を貨幣...
-
PHPのpack関数をJavaで実装でき...
-
全角スペースのチェックについて
-
「タイプ初期化子が例外をスロ...
-
オープンアプリにおける、テキ...
-
エクセルVBAで、条件に一致する...
-
3年間同じクラスになる確率
-
インスタンス参照でアクセスで...
-
c++,ある関数のクラスから別の...
-
ワイルドカード<?>と型パラメー...
-
「天声人語」をインターネット...
-
DataGridViewでセルクリックイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
【JAVA】与えられた金額を貨幣...
-
連続する「\\」をひとつの「\\...
-
文字列からダブルクオートの削除
-
VB.Net Object型 空かどうか
-
0除算の例外処理ができない!!...
-
VB.NETで16進数が正しいかどう...
-
数字か文字列かを判定する関数
-
例外ってIf文の中に入れますか...
-
C# マルチスレッドにおける例外...
-
スタックオーバーフローとは?
-
String型の日付(2005/11/25)の...
-
Timestamp型への変換について(J...
-
C# UriFormatExceptionの回避
-
VBA Evaluate関数 型が一致しま...
-
ADOによるレコードの追加/更新
-
時間の取得
-
WebClient()以外でネットにアク...
-
C#の捕捉されない例外処理の対...
-
タトゥーや墨を入れる人の共通点
おすすめ情報