Как обработать различные версии xsd файлов в одном JAVA-приложении?

Я купил Textmate, потому что мне понравился он так, одно из нескольких приложений, за которые я заплатил. Другие редакторы просто не стоят того. Если Вы идете для IDE, затмение или netbeans являются большими и свободными.

13
задан tangens 10 November 2009 в 11:23
поделиться

1 ответ

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

Далее следует доступ к данным. Вы не говорите, почему вы используете три разные схемы. Единственная рациональная причина - это развивающаяся спецификация данных (т. Е. Схемы представляют версии 1, 2 и 3 одних и тех же данных). Если это не ваша причина, тогда вам нужно переосмыслить свой дизайн.

Если вы пытаетесь поддерживать развивающуюся спецификацию данных, тогда вам нужно ответить на вопрос «как мне поступить с отсутствующими данными». На это есть несколько ответов: один - поддерживать несколько версий кода. При рефакторинге общих функций это неплохая идея, но она может легко стать неподдерживаемой.

Альтернативой является использование единой кодовой базы и некоего объекта адаптера , который включает ваши правила. И если вы пойдете по этому пути, JAXB будет неправильным решением, поскольку он привязан к схеме. Возможно, вы сможете использовать разрешающий конвертер XML-> Java: я считаю, что XStream будет работать, и я знаю, что версия 1.1 Practical XML будет работать (поскольку я ее написал) - хотя вам придется построить его самостоятельно.

Другая, лучшая альтернатива, в зависимости от сложности схемы, заключается в разработке набора объектов, использующих XPath для извлечения данных. Я бы, вероятно, реализовал использование «главного» объекта, который содержит выражения XPath для каждого поля в каждом варианте схемы. Затем создайте легкие объекты-оболочки, которые содержат версию DOM вашего экземпляра документа, и используйте XPath, соответствующий схеме. Обратите внимание, однако, что это ограниченный доступ только для чтения.

6
ответ дан 2 December 2019 в 01:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: