Рекомендации по хранению содержимого html-формы в XML-документе

У меня есть две веб-формы, которые заполняются пользователем. Они содержат различные типы полей: текстовые поля, переключатели, флажки (одиночные или в группах). Всю информацию, которую отправляет пользователь, я храню в поле XML в базе данных.

У меня вопрос: каковы хорошие практики для строковой информации такого рода в файле XML.

Пока делаю так:

Текстовые поля, например: txtName я вставил в теги <Name>John</Name>.

Радиоблоки, например: rdbSex я вставил в <Sex>Male</Sex>.

Группы флажков я помещаю в один XML-тег и указываю true или false для каждого элемента флажка, например:

<favoriteMovies>
    <StarWars>True</StarWars>
    <KillBill>False</KillBill>
    ....
</favoriteMovies>

Фильмы хранятся в базе данных в одной таблице, и каждый из них имеет идентификатор. Должен ли я хранить его также в файле XML? Как это:

<favoriteMovies>
    <StarWars id="4">True</StarWars>
    <KillBill id="6">False</KillBill>
    ....
</favoriteMovies>

или, может быть, сохранить только выбранные варианты (в данном случае без KillBill):

<favoriteMovies>
    <StarWars id="4 />
    ....
</favoriteMovies>

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

<Address>
    <City>2</City>
</Address>

или вот так:

<Address>
    <City id="2" />
</Address>

или вот так

<Address>
    <City>New York</City>
</Address>

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

Есть ли рекомендации или какие-то документы, определяющие правила хранения элементов веб-форм в XML-документах?


person Lukasz Lysik    schedule 03.11.2009    source источник
comment
вы собираетесь хранить все данные в файлах XML или ожидаете, что они будут расти, поэтому вы захотите поместить их в базу данных?   -  person Raj More    schedule 03.11.2009
comment
Я не очень хорошо понял ваш вопрос. Я помещаю данные в XML, а затем сохраняю их в базе данных в столбце XML. Есть два разных документа (веб-формы). В одном около 30 полей, в другом около 10. Структура этих документов может измениться в будущем, а также, возможно, будет еще один документ, который я добавлю. Таким образом, XML кажется лучшим выбором.   -  person Lukasz Lysik    schedule 03.11.2009


Ответы (3)


Я бы пошел таким путем:

1) Относитесь к тому, что вы хотите поместить в свой XML, как к объектам

2) Найдите, какое свойство лучше всего описывает ваш объект для людей, поместите его между тегом

3) Все остальные атрибуты, которые украшают объект, поставьте их как атрибуты тэгов.

Я снова возьму примеры Рубенса с модификацией:

<favoriteMovies>
    <Movie id="4">StarWars (just if required)</Movie>
    ....
</favoriteMovies>

Я изменил название, потому что это то, что лучше всего описывает фильм (для людей), и потому что если у вас есть специальные персонажи, вы сможете <![CDATA[ ]]> их...

Надеюсь это поможет

person Mike Gleason jr Couturier    schedule 03.11.2009
comment
Я думаю, вы не должны зависеть от того, как построить свой XML, из-за происхождения данных (пока они есть). Вот почему вы можете поискать примеры XML-файлов и передовой опыт. Я дал небольшие подсказки в своем ответе, но в конечном итоге решать вам! Удачи! - person Mike Gleason jr Couturier; 03.11.2009
comment
Я думал, что, возможно, существует какой-то стандарт, как это сделать. Возможно, в будущем я хотел бы перенести свою информацию в другое существующее приложение, чтобы потом не сталкиваться с какими-либо проблемами. Но в любом случае, спасибо за отличное объяснение. - person Lukasz Lysik; 03.11.2009

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

<favoriteMovies><!-- all this are favorite, so "true" isnt required -->
    <Movie id="4" name="StarWars (just if required)" />
    ....
</favoriteMovies>

Через это

<favoriteMovies>
    <StarWars id="4">True</StarWars>
    <KillBill id="6">False</KillBill>
    ....
</favoriteMovies>

Обратите внимание, что я удалил KillBill, так как он помечен как «не любимый».

Итог: сохраняйте размер XML-документа небольшим, и у вас не возникнет проблем.

person Rubens Farias    schedule 03.11.2009

Я бы не стал хранить XML-документы в базе данных (тем более, что они кажутся объектами транспортного типа). Почему бы просто не хранить данные в реляционной форме в базе данных. Формы хороши для сбора данных. XML хорош для передачи данных, а таблицы базы данных хороши для хранения данных. Поскольку вы уже храните фильмы в базе данных, должно быть легко хранить остальные данные в базе данных явно, а не неявно через XML.

person Johan    schedule 03.11.2009
comment
Как я прокомментировал @Raj More. Структуры форм очень гибкие. Некоторые поля могут быть удалены в ближайшем будущем, а некоторые могут быть добавлены. Другое дело: есть две разные формы, которые хранятся в одной таблице. В дальнейшем их может быть 3 и даже больше. Я не думаю, что это хорошая идея иметь разные таблицы для каждой формы. Кроме того, Microsoft рекомендует использовать тип данных XML в тех случаях, когда структура данных может быть различной (Microsoft, SQL Server 2005, Внедрение и обслуживание, стр. 256). - person Lukasz Lysik; 03.11.2009