Файл каталога XML не удается разрешить - PullRequest
1 голос
/ 29 апреля 2010

Я использую совместимый с 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 разрешаются очень хорошо, используя xml:base, установленный для элемента group. Только те элементы, которые должны быть разрешены с использованием элементов systemSuffix, не работают. Итак, если у меня есть документ, который объявляет свой DocType с использованием идентификатора PUBLIC, он будет решен без проблем (в моем CatalogManager.properties установлен параметр prefer=public). Однако, если у меня просто есть идентификатор SYSTEM (например, «OxChapML.dtd»), это должно соответствовать соответствующему systemSuffix, но это не так. Включение отладки на распознавателе показывает, что он даже не пытается сопоставить с помощью systemSuffix.

Ответы [ 2 ]

1 голос
/ 03 февраля 2012

Я только что столкнулся с ситуацией, для решения которой потребовалось много времени, когда в моей среде разработки все работало нормально, но в производственной среде оно умирало тихо .

Сначала я подумал, что это может быть проблема с пространством имен XML в файле каталога, но это был тупик.

Оказывается, что наличие объявления DOCTYPE для one файлов catalog.xml в иерархии каталогов было виновником.Разница между средой разработки и производством, которую я упустил из виду, заключалась в том, что последняя (VDI в закрытой интрасети) не имеет доступа к открытому интернету.Поэтому преобразователю каталога не удалось открыть системный идентификатор файла catalog.dtd (т. Е. URL-адрес http:).Как только я удалил декларацию DOCTYPE, все заработало как положено.

Очень расстраивает.То, что распознаватель каталога молчал об этом, можно было бы считать ошибкой - он должен пропустить ошибку такого рода хотя бы в журналы или, предпочтительно, выдать исключение.

Как правило, вывероятно, может обработать ваш catalog.xml как правильно сформированный XML, так что, как правило, можно пропустить объявление DOCTYPE.

1 голос
/ 01 мая 2010

Где находятся DTD? В том же каталоге, что и файл каталога? Ваши URI все относительно. Относительные URI разрешаются относительно местоположения файла каталога (если не задан xml: base). Они не связаны с местоположением проверяемого файла XML.

Трудно угадать проблему, не зная, где расположены различные файлы относительно друг друга.

Можете ли вы получить разрешение каталога, работающее с любым DTD как все?

...