![]() |
Модераторы: diadiavova |
![]() ![]() ![]() |
|
GShadrin |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 20.7.2009 Где: Екатеринбург Репутация: нет Всего: нет |
Добрый вечер.
Интересует такой вопрос. Разрабатывается формат хранения на основе xml. Внутри формата есть сущность (объект) A. При этом объект A бывает разных типов, у каждого типа может быть свой набор атрибутов и вложенных узлов. Для идентификации типа используется атрибут type. При этом в дальнейшем возможно добавление новых типов. Желательно, чтобы добавление нового типа в систему можно было произвести достаточно просто. На стороне объектной модели в приложении объекты выстроены в иерархию, все наследуются от объекта BaseA. Для валидации используется XML Schema. На мой взгляд в документе выделять отдельные узлы под каждый тип объекта не очень удобно в данной системе (A_type1, A_type2), использование атрибута type мне нравиться больше. К тому же в случает выделения отдельных узлов в схеме придется отдельно описывать каждый объект. Возможно в этом я не прав. Использование атрибута type влечет за собой следующую проблему: поскольку в схеме только один объект A, а разные типы этого объекта могут иметь различные составляющие приходится описывать более общую структуру в схеме и часть проверок выносить в код. Насколько я понимаю задать разные правила валидации для объекта в зависимости от значения его атрибута в xsd v 1.0 нельзя. Язык JAVA. Интересуют следующие вопросы:
|
|||
|
||||
diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
GShadrin, мне почему-то кажется, что ты и сам знаешь ответы на все свои вопросы.
Если тебе надо, чтобы валидация проходила только средствами схемы - описывай все элементы в ней. Если это не подходит - придется выполнять проверку в коде. В самой схеме есть механизм, позволяющий описывать тип с помощью атрибута, для тех случаев, когда некоторая группа элементов описывается абстрактным типом, тогда на его месте может появиться либо элемент производного типа, либо сам этот элемент с атрибутом xsi:type (xsi - это префикс пространства http://www.w3.org/2001/XMLSchema-instance). Насколько я понимаю это используется для случаев, когда тип может меняться динамически, поскольку модель DOM позволяет менять значения атрибутов, но не имена элементов. В любом случае, все элементы все равно должны быть описаны в схеме.
Не совсем понятно, что имеется в виду. Если документ прошел валидацию по схеме это уже означает, что он валидный, то есть соответствует этой схеме. Если тебе надо, чтобы к примеру элемент имел базовый набор атрибутов, но при этом мог иметь еще и дополнительные, не описанные в схеме явно, то такая возможность в схеме существует причем не только для атрибутов, но и для вложенных элементов. Другой вопрос, что все эти дополнения проверяться на соответствие схеме не будут, то есть проверено будет только то, что они расположены в таком месте, где это допускается.
Строгих правил нет, обычно если свойства имеют короткие значения, то лучше атрибут. Что касается простоты добавления нового типа в схему, ну для этого можно отдельную схему замутить и заинклюдить ее в основную, а добавлять можно и программно, ведь схема - это xml документ, так что получить программный доступ к ней совсем не сложно. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
||||
|
|||||
magelan |
|
|||
![]() потерял xPath ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 5.4.2010 Репутация: 7 Всего: 16 |
Для трансформера и программиста всегда лучше атрибут, доступ быстрее, обрабатывать проще. <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 |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 2 Всего: 161 |
Ему нужна та самая валидация совместимости, от отсутствия реализации которой я и сам сру кирпичами ![]() Ему пофиг что есть в документе сверх того, что ему нужно от туда извлечь.
Можно описать XSL шаблон трансформации, который приводит исходный к достаточному виду, и валидировать уже результат. В общем - фиговое решение такой насущной проблемы. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 8 Всего: 538 |
Ты 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. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "XML/XSLT" | |
|
Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась. Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение. Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел Желаем удачи в Вашем деле! Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | XML, XSL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |