xmlhack.ru XML-форумы
Обсуждение XML и связанных с ним технологий

Валидация child элемента - зависящая от аттрибута parent


Автор Сообщение
zuismanm
Новичок

Зарегистрирован: 20.11.2008
Сообщения: 6

[13281] Чт Ноя 20, 2008 17:38
Валидация child элемента - зависящая от аттрибута parent
Возможно ли такое???
Имеется следующая кострукция:

Код:

<config_file name="c:\kuku.dat" sections=false>
   <update name="kuku" value="$shmuku"/>
</config_file>


Теперичя - мечта идиота - состоит в том, чтобы сделать валидацию атрибута "name" (в элементе "update")зависящей от значения атрибута "sections" в config_file)...
Поясню... Если "sections"=true то "name" может содержать точьку "section1.kuku" - то есть - на сомом деле - имя будет состоять из имени секции и собственно именни переменной... Вроде:

Код:

<config_file name="c:\kuku.dat" sections=true>
   <update name="section1.kuku" value="$shmuku"/>
</config_file>


Но - если sections=false то точьки там быть не может... Можно ли сделать такую условную валидацию посредством схемы (или посредством еще как нибудь)???
Vasilisk
Наставник

Зарегистрирован: 17.05.2006
Сообщения: 370
Откуда: Украина, Харьков
[13286] Чт Ноя 20, 2008 22:58

При помощи XSD схемымы можно валидировать только по структуре, но не по значениям
_________________
С уважением Vasilisk
Уважайте читающих, используйте тэги [code ][/code]
zuismanm
Новичок

Зарегистрирован: 20.11.2008
Сообщения: 6

[13288] Чт Ноя 20, 2008 23:50

Vasilisk писал(а):

При помощи XSD схемы можно валидировать только по структуре, но не по значениям


Коротко, но ясно!!! Спасибо!
Какие могут быть альтернативные варианты (помимо написания скрипта на перле/JAVA)???
Vasilisk
Наставник

Зарегистрирован: 17.05.2006
Сообщения: 370
Откуда: Украина, Харьков
[13289] Пт Ноя 21, 2008 00:26

В клиентской программе, при обнаружении sections="false" игнорировать дочерние элементы
_________________
С уважением Vasilisk
Уважайте читающих, используйте тэги [code ][/code]
zuismanm
Новичок

Зарегистрирован: 20.11.2008
Сообщения: 6

[13290] Пт Ноя 21, 2008 00:34

Нет - я имел ввиду - варианты валидации... В силу нескольких причин - валидация должна быть сделана обязательно... То есть - в кранем случае - придется написать скрипт на перле - котый "доделает" валидации - которые не сможет сделать XML editor... Вопрос - или есть какие-то более универсальные методы валидации посредством более-менее стандартных технологий, или таки - Perl...???
Fireball
Наставник

Зарегистрирован: 26.02.2008
Сообщения: 282

[13292] Пт Ноя 21, 2008 12:27

Зачем PERL, на XSLT валидируй.
Vasilisk
Наставник

Зарегистрирован: 17.05.2006
Сообщения: 370
Откуда: Украина, Харьков
[13295] Сб Ноя 22, 2008 00:20

Да, это еще один вариант. Написать XSLT преобразование, которой преобразует Ваш документ в документ, который можно отвалидировать при помощи XSD
_________________
С уважением Vasilisk
Уважайте читающих, используйте тэги [code ][/code]
Fireball
Наставник

Зарегистрирован: 26.02.2008
Сообщения: 282

[13296] Сб Ноя 22, 2008 03:19

А что вообще пытаемся реализовать? Задачу можно более цельно описать?
А то как-то запутано все. Наверняка, есть более простые способы.
zuismanm
Новичок

Зарегистрирован: 20.11.2008
Сообщения: 6

[13297] Сб Ноя 22, 2008 18:28

Реализовать пытаемся аппликацию - которая помимо всего прочего вносит изменения в некий набор файлов - по формату похожих на ini files винды... Часть из них - имеют секции , а часть - нет... (просто <key>=<value>)... Задание ентому модификатору - записывается в формате XML - фрагмент из которого я и привел... Просто XML пишут одни люди , а саму аппликацию пишут и тестирую другие (то бишь - я любимый)... Потому и хотелось бы максимум проверок вынести в сам XML (на стадию его написания+валидации)... Вот в общем и все... Из инструментария - XML spy version 4 плюс бесплатные продукты (я пользую Netbeans - поскольку он - наша среда для жабы + jedit...имеется eclipse хотя я личьно им не пользуюсь... Но если есть в нем что подходящее - то - запользуем...)... Если можно - подробнее - как можно сделать валидацию на XSLT??? Я только просмотрел коротенький tutorial, но -как я понял - это язык для описания преобразований , не валидаций??? или я чего-то упускаю???

P.S
Вот - нарыл в нете - вроде как подобные задачи советуют решать с помощью некоего зверя по имени "Shematron"...Но - как я понимаю - он напрямую с XML spy тем более такой древней версии как имеется в моем распоряжении - не интегрируется...
Fireball
Наставник

Зарегистрирован: 26.02.2008
Сообщения: 282

[13301] Вс Ноя 23, 2008 01:02

Ну там есть конструкции xsl:if и xsl:choose/xsl:when/xsl:otherwise, с помощью которых можно что-нибудь проверить, в том числе и данное соответствие. Далее, например, вызвать внешнюю функцию, которая выведет ошибку куда-нибудь.
zuismanm
Новичок

Зарегистрирован: 20.11.2008
Сообщения: 6

[13302] Вс Ноя 23, 2008 09:23

Большое пионерское спасибо!!! Пошел читать про xslt...
zuismanm
Новичок

Зарегистрирован: 20.11.2008
Сообщения: 6

[13319] Пн Ноя 24, 2008 13:23

Тут кстати еще такая заморочка методологического плана...
Поскольку есть постоянный поток обмена XML файлами между группами разработчиков (фактически - они являются своего рода формализованным описанием интерфейса между группами...) - это ставит несколько дополнительных задач... Например - хранения версий этих самых XML, сравнения их, поиска различий по специфическим типам элементов... Все это наталкивает меня на мысль о хранении этих XML, не в файловой системе, а в какой нибудь РБД (под руками имеется ORACLE, SQL server , PostgreSQL, MS Access). Пока я себе несколько смутно представляю процесс закачки файлов XML в РБД и работы с ними там (хотя боса уже пронял и книгу по работе с XML в РБД заказали...)
Засим 3 вопроса

  • Правильна ли сама идея??? Основная цели - которую я хочу достичь использованием РБД - Централизованный и удобный доступ ко всем интерфейсам, возможность хранения и сравнения версий, расширенные возможности поиска как внутри одного XML интерфейса , так и по нескольким(ну скажем какие группы требовали во время апдэйта версии изменить поля в некоей секции некоего INI файла
  • Если я буду их хранить в РБД - то это открывает 2 дополнительные возможности валидации - посредством constraints в схеме в РБД , и непосредственно в GUI - который я скажем накропаю на Access... Правильно ли идти по пути такой перекрестной валидации - или - сие от лукавого, и ОРАКЛУ - ораклового, а ИКСЕМЕЛЮ - ИИКСЕМЕЛЕВО???
  • Если моя идея все еще не признана бредовой - какой из имеющихся у меня РБД для нее подходит лучше???