次の問題があります: いくつかの名前空間を持つ XML ドキュメントがあります。開始タグは次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<REQ-IF
xmlns="http://www.omg.org/spec/ReqIF/20110401/reqif.xsd"
xmlns:doors="http://www.ibm.com/rdm/doors/REQIF/xmlns/1.0"
xmlns:reqif="http://www.omg.org/spec/ReqIF/20110401/reqif.xsd"
xmlns:reqif-common="http://www.prostep.org/reqif"
xmlns:reqif-xhtml="http://www.w3.org/1999/xhtml"
xmlns:rm="http://www.ibm.com/rm"
xmlns:rm-reqif="http://www.ibm.com/rm/reqif"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
ご覧のとおり、多くの名前空間があります。パーサーとして Xerces を使用します。問題は、パーサーが認識していない名前空間から URI にアクセスしようとすることです。解析が遅くなるため、これは悪いことです。たとえば、「http://www.prostep.org/reqif」は Web ページに解決されます。コンテンツは問題なく解析されます (もちろん、ネームスペース URI は単なる名前であるため)、URI を取得するときにパーサーが長時間ハングするため、時間がかかります。
だから、2つの質問:
- Xerces が名前空間 URI を「実際の」コンテンツを含む URI のように扱おうとするのはなぜですか?
- これを無効にするにはどうすればよいですか?
記録として、URI はスキーマまたは DTD の場所ではありません。外部 DTD の読み込みを無効にしようとしましたが、もちろん何もしませんでした:
parser.setProperty("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
何かご意見は?