1

OASIS v 1.1互換のリゾルバー(以下のカタログと組み合わせたNorm WalshのXMLResolver。ただし、ここで何らかの明らかなエラーが発生したと確信しています(これは、初めて使用する必要があります)を使用しています。 v 1.1の機能)OxChapML.dtdを解決しようとして失敗したため、誰かがこれに明らかに問題があるのを見ることができますか?それとも微妙に間違っているのでしょうか?

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE catalog PUBLIC "-//OASIS//DTD XML Catalogs V1.1//EN"
         "http://www.oasis-open.org/committees/entity/release/1.1/catalog.dtd">
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
        <group  xml:base="file:///Volumes/Ac-EDP/DTG/SP%20DTD%20management/OUP_DTD/">
                <public publicId="-//OXFORD//DTD OXCHAPML//EN" uri="OxChapML.dtd"/>
                <public publicId="-//OXFORD//DTD OXENCYCLML//EN" uri="xEncyclML.dtd"/>
                <public publicId="-//OXFORD//DTD OXLAWML//EN" uri="OxLawML.dtd"/>
                <public publicId="-//OXFORD//DTD OXSTRUCTML//EN" uri="OxStructML.dtd"/>
                <public publicId="-//OXFORD//DTD OXLAWREPML//EN" uri="OxLawRepML.dtd"/>
                <public publicId="-//OXFORD//DTD OXBILINGML//EN" uri="OxBilingML.dtd"/>
                <public publicId="-//OXFORD//DTD OXMONOLINGML//EN" uri="OxMonolingML.dtd"/>
                <public publicId="-//OXFORD//DTD TIMELINES//EN" uri="timelines.dtd"/>
                <systemSuffix OxChapML.dtd" systemIdSuffix="OxChapML.dtd"/>
                <systemSuffix uri="xEncyclML.dtd" systemIdSuffix="xEncyclML.dtd"/>
                <systemSuffix systemIdSuffix="OxLawML.dtd" uri="OxLawML.dtd"/>
                <systemSuffix systemIdSuffix="OxStructML.dtd" uri="OxStructML.dtd"/>
                <systemSuffix systemIdSuffix="OxLawRepML.dtd" uri="OxLawRepML.dtd"/>
                <systemSuffix systemIdSuffix="OxBilingML.dtd" uri="OxBilingML.dtd"/>
                <systemSuffix systemIdSuffix="OxMonolingML.dtd" uri="OxMonolingML.dtd"/>
                <systemSuffix systemIdSuffix="timelines.dtd" uri="timelines.dtd"/>
        </group>        
</catalog>

更新:すべての要素は、要素のセットをpublic使用して問題なく解決されます。失敗している要素を使用して解決する必要があるのは、これらの要素だけです。したがって、PUBLIC識別子を使用してDocTypeを宣言するドキュメントがある場合、問題なく解決されます(CatalogManager.propertiesに設定があります)。ただし、SYSTEM識別子(「OxChapML.dtd」など)がある場合、これは適切なものと一致する必要がありますが、一致しません。リゾルバーのデバッグを上げると、を介して一致させようとしていないことがわかります。xml:basegroupsystemSuffixprefer=publicsystemSuffixsystemSuffix

4

2 に答える 2

1

DTDはどこにありますか?カタログファイルと同じディレクトリにありますか?URIはすべて相対的です。相対URIは、カタログファイルの場所を基準にして解決されます(xml:baseが設定されている場合を除く)。これらは、検証されるXMLファイルの場所に関連していません。

さまざまなファイルが相互に関連してどこにあるかを知らずに問題を推測することは困難です。

すべてのDTDでカタログ解決を機能させることができますか?

于 2010-05-01T09:04:27.187 に答える
1

解決するのに長い時間がかかった状況に遭遇しました。開発環境ではすべてが正常に実行されましたが、本番環境では静かに停止しました。

最初は、これはカタログファイルのXML名前空間の問題かもしれないと思いましたが、それは盲目的な路地でした。

カタログ階層内のcatalog.xmlファイルの1つにDOCTYPE宣言が存在することが原因であることが判明しました。私が見落としていた開発環境と本番環境の違いは、後者(閉じたイントラネットのVDI)はオープンインターネットにアクセスできないことでした。そのため、カタログリゾルバーはcatalog.dtdファイルのシステム識別子(つまり、http:URL)を開くことができませんでした。DOCTYPE宣言を削除するとすぐに、すべてが期待どおりに機能しました。

非常にイライラします。カタログリゾルバーがこれについてサイレントであったことはバグと見なされる可能性があります—少なくともこの種のエラーをログに浸透させるか、できれば例外をスローする必要があります

原則として、catalog.xmlは整形式のXMLとして処理できる可能性があるため、通常はDOCTYPE宣言を省略しても安全です。

于 2012-02-03T00:20:05.667 に答える