варианты ввода xsd - PullRequest
       6

варианты ввода xsd

1 голос
/ 24 марта 2012

У меня есть два противоположных требования, связанных с документом xml и связанным с ним xsd.

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

противоположные требования следующие:

Сначала я хочу создать / определить документ XML и его схему так, чтобы в нее никогда не вносились изменения.поскольку я извлекаю данные из реляционной базы данных, я думал о создании структуры XML, такой как эта

<data name="aaa" value="bbb" type="ccc" scale="ddd"/>

, где имя и значение будут обязательными, а тип и масштаб (например, десятичная шкала) являются необязательными, этипоследние два используются только «когда это необходимо»

во-вторых, мне нужен строго типизированный xsd.это сделано для того, чтобы потребитель загруженного XML-документа не получил «неприятных сюрпризов».и они могут генерировать Java-объекты строго типа, чтобы распаковать XML-документ.

Могу ли я иметь структуру XML, показанную выше, и иметь строго типизированный xsd?

или

isМожно ли решить оба эти требования в одном?то есть: - Чрезвычайно гибкая структура XML, которая может справиться с любыми «неизвестными» требованиями к данным в будущем наряду с чрезвычайно строгой типизацией данных?

Что является лучшим компромиссным решением?

Ответы [ 2 ]

2 голосов
/ 26 марта 2012

Я все еще не очень ясно с вашим требованием:Здесь я расскажу о некоторых функциях, доступных в XSD.

Для либерального подхода есть несколько вариантов, например
1) XSD: любой, который разрешает любые элементы, а anyAttribute допускает любые атрибуты для определенногоузел.
2) Вы можете сделать элемент необязательным, используя minOccurs='0', для атрибутов use='Optional'
3) объявление типа данных в виде строки позволит ему быть нулевым.если его date / datetime, тогда определите simpleType с шаблоном MM / DD / YYYY и т. д., и используйте его как TYPE, чтобы вы могли также разрешить нулевые данные.(Пустой тег)
4) использование <xsd:All/> вместо <xsd:sequence/> позволяет использовать элементы в любом порядке.

Для строгого соблюдения
1) Использовать minOccurs = '1'для тега, который должен .. по умолчанию каждый элемент будет иметь minOccurs =' 1 ', если вы не объявите.
2) Используйте minLength = '1', чтобы тег имел значение, чтобы он не был нулевымЯ перечислю еще несколько, если меня осветят любым:)

0 голосов
/ 26 марта 2012

надеюсь, это яркий пример: -

У меня около 50 миллионов пользователей.Каждый пользователь может иметь сотни связанных элементов данных, в настоящее время около 500 элементов данных.большинство из которых являются необязательными.

Мне нужно извлечь эти элементы данных из одной базы данных и загрузить во вторую удаленную базу данных.

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

Я решил преобразовать эти сотни элементов данных в полный XML-документ, по одному XML-документу на пользователя, используя формат, показанный в моем исходном вопросе.

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

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

Мне не нужно придерживаться XML, формат JSON также удовлетворит мое требование иметь структуру, способную справляться с добавлениями элементов данных.Однако я не знаю способа проверки JSON таким же образом, как xsd может использоваться для проверки связанных XML-документов.

...