Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Валидация Xml 
:(
    Опции темы
GShadrin
Дата 6.2.2012, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 20.7.2009
Где: Екатеринбург

Репутация: нет
Всего: нет



Добрый вечер.

Интересует такой вопрос. Разрабатывается формат хранения на основе xml. Внутри формата есть сущность (объект) A. При этом объект A бывает разных типов, у каждого типа может быть свой набор атрибутов и вложенных узлов. Для идентификации типа используется атрибут type. При этом в дальнейшем возможно добавление новых типов. Желательно, чтобы добавление нового типа в систему можно было произвести достаточно просто.
На стороне объектной модели в приложении объекты выстроены в иерархию, все наследуются от объекта BaseA.  
Для валидации используется XML Schema. 
На мой взгляд в документе выделять отдельные узлы под каждый тип объекта не очень удобно в данной системе (A_type1, A_type2), использование атрибута type мне нравиться больше. К тому же в случает выделения отдельных узлов в схеме придется отдельно описывать каждый объект.  Возможно в этом я не прав. Использование атрибута type влечет за собой следующую проблему: поскольку в схеме только один объект A, а разные типы этого объекта могут иметь различные составляющие приходится описывать более общую структуру в схеме и часть проверок выносить в код. Насколько я понимаю задать разные правила валидации для  объекта в зависимости от значения его атрибута в xsd v 1.0 нельзя.
Язык JAVA.

Интересуют следующие вопросы:
  • Когда что лучше использовать? Атрибут type или разделить на много объектов, для каждого описать свое правило в схеме?
  • Если все же использовать атрибут, как лучше организовать валидацию. Можно ли как-то сделать схему, прохождение валидации по которой, есть необходимое и достаточное условие валидности документа? Или в таком случае не обойтись без дополнительной валидации в коде?
  • И доп. вопрос. В каком случае лучше выносить простое свойство объекта в атрибут, а в каком в отдельный узел.
 
PM MAIL   Вверх
diadiavova
Дата 7.2.2012, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



GShadrin, мне почему-то кажется, что ты и сам знаешь ответы на все свои вопросы. 
Если тебе надо, чтобы валидация проходила только средствами схемы - описывай все элементы в ней. Если это не подходит - придется выполнять проверку в коде. В самой схеме есть механизм, позволяющий описывать тип с помощью атрибута, для тех случаев, когда некоторая группа элементов описывается абстрактным типом, тогда на его месте может появиться либо элемент производного типа, либо сам этот элемент с атрибутом xsi:type (xsi - это префикс пространства http://www.w3.org/2001/XMLSchema-instance). Насколько я понимаю это используется для случаев, когда тип может меняться динамически, поскольку модель DOM позволяет менять значения атрибутов, но не имена элементов. В любом случае, все элементы все равно должны быть описаны в схеме.
Цитата(GShadrin @  6.2.2012,  22:05 Найти цитируемый пост)
Можно ли как-то сделать схему, прохождение валидации по которой, есть необходимое и достаточное условие валидности документа?

Не совсем понятно, что имеется в виду. Если документ прошел валидацию по схеме это уже означает, что он валидный, то есть соответствует этой схеме. Если тебе надо, чтобы к примеру элемент имел базовый набор атрибутов, но при этом мог иметь еще и дополнительные, не описанные в схеме явно, то такая возможность в схеме существует причем не только для атрибутов, но и для вложенных элементов. Другой вопрос, что все эти дополнения проверяться на соответствие схеме не будут, то есть проверено будет только то, что они расположены в таком месте, где это допускается.
Цитата(GShadrin @  6.2.2012,  22:05 Найти цитируемый пост)
И доп. вопрос. В каком случае лучше выносить простое свойство объекта в атрибут, а в каком в отдельный узел.

Строгих правил нет, обычно если свойства имеют короткие значения, то лучше атрибут.

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


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
magelan
Дата 17.2.2012, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


потерял xPath
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 5.4.2010

Репутация: 7
Всего: 16



Цитата(GShadrin @  6.2.2012,  21:05 Найти цитируемый пост)
И доп. вопрос. В каком случае лучше выносить простое свойство объекта в атрибут, а в каком в отдельный узел.

Для трансформера и программиста всегда лучше атрибут, доступ быстрее, обрабатывать проще.
<address index="" city="" street="" />

отдельный тег делается как логическое/смысловое разделение или в том случае, когда необходима повторяемость одинаковых, либо разных сущностей.
<order number="">
    <shipping-addresses count="2">
         <address index="" city="" street="" />
         <address index="" city="" street="" />
    </shipping-addresses>
    <person first-name="" middle-name="" last-name="" />
</order>

Еще отдельный тег иногда делают, для текста, когда значение может иметь многострочный контент с форматированием.

Это сообщение отредактировал(а) magelan - 17.2.2012, 14:39
PM MAIL   Вверх
Zloxa
Дата 17.2.2012, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 2
Всего: 161



Цитата(diadiavova @  7.2.2012,  00:55 Найти цитируемый пост)
Не совсем понятно, что имеется в виду.

Ему нужна та самая валидация совместимости, от отсутствия реализации которой я и сам сру кирпичами  smile 
Ему пофиг что есть в документе сверх того, что ему нужно от туда извлечь.
Цитата(GShadrin @  6.2.2012,  21:05 Найти цитируемый пост)
 Можно ли как-то сделать схему, прохождение валидации по которой, есть необходимое и достаточное условие валидности документа? 

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


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
LSD
Дата 17.2.2012, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 8
Всего: 538



Цитата(Zloxa @  17.2.2012,  16:08 Найти цитируемый пост)
Ему нужна та самая валидация совместимости, от отсутствия реализации которой я и сам сру кирпичами

Ты TREX и schematron смотрел?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась.

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.0743 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.