2012-01-18 2 views
0

Я получил схему .xsd, которая имеет несколько элементов корня, несколько сложных и простых типов, сложные типы относятся к этим корневым элементам. Я не могу сгенерировать .xml так, как я хочу, из-за этих корневых элементов. Поэтому я думаю, что мне нужно добавить элемент, который будет служить корневым элементом, и добавить все остальные элементы в качестве своих детей, или я ошибаюсь?Инструмент для рефакторирования .xsd-схемы?

Есть ли инструмент, который может помочь мне создать корневой элемент и схему рефакторинга? Что я получил: enter image description here

Я подумал, может быть, мне просто нужно создать еще один xsd с 1 элементом и ref все элементы образуют первый xsd в нем, но я точно не знаю, как это сделать. Это хорошая идея?

ответ

2

Ответ на ваше редактирование действительно, как сказал Пангея, НЕТ. И это потому, что для ссылки на другой элемент (как в < xsd: элемент ref = «SomeElement» ... />), указанный элемент должен быть объявлен глобально.

Другим сценарием, который требует глобальных элементов, является использование групп замещения. То, что я пытаюсь предложить, заключается в том, что не всегда можно реорганизовать XSD таким образом, чтобы глобальные оставались только теми элементами, которые вы хотите использовать как root в XML.

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

Еще одна причина, по которой я хотел добавить этот ответ, заключалась в том, что я заметил использование XML в качестве имени тега. Хотя может показаться, что все в порядке, я могу сказать вам, что я видел довольно красивые приложения с именем «big-name», которые просто задушили бы с этим именем тега < XML />. XML на самом деле «зарезервирован», пожалуйста, взгляните на this section спецификации XML. Цитируйте: «Имена, начинающиеся со строки« xml »или с любой строкой, которая будет соответствовать (('X' | 'x') ('M' | 'm') ('L' | 'l')) , зарезервированы для стандартизации в этой или последующих версиях данной спецификации. "

Всегда приятно играть с спецификации ....

+0

спасибо за ответ! – bunnyjesse112

1

Любой глобальный элемент, который вы определяете в схеме, является потенциальным корневым элементом в документе экземпляра. Если вы не хотите этого поведения, убедитесь, что в xsd указано только одно определение глобального элемента. Это не имеет никакого отношения к инструменту (хотя редакторы xml могут упростить это).

+0

Спасибо за ответ! Я думал, может быть, мне просто нужно создать еще один xsd с 1 элементом, и все элементы будут содержать первый xsd в нем. Это хорошая идея? – bunnyjesse112

+1

@ bunnyjesse112 перемещение элементов в разные xsd не решает проблему, если они все еще определены глобально –

Смежные вопросы