XML: при отсутствии данных оставить элемент пустым или не включать элемент вообще? - PullRequest
1 голос
/ 12 февраля 2011

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

Мне было интересно, что было бы более «правильным» способом обработки пустых полей «адрес 2» при генерации XML - следует ли мне по-прежнему включать элемент «address2» и просто позволить ему быть <address2 /> или я должен опустить это вообще? То же самое относится и к полю «штат», поскольку оно обычно пустое, если это адрес не из США.

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

Спасибо!

P.S. Я знаю, что наличие «адреса 1», «адреса 2» и т. Д. Не обязательно является лучшим дизайном, но таковы существующие данные, и я не могу их изменить.

Ответы [ 2 ]

1 голос
/ 12 февраля 2011

Посмотрите, как ADO DataSet делает это.(На самом деле, вы можете просто использовать ADO DataSet.)

Метод WriteXml сериализует DataSet в XML.Каждый DataRow сериализуется как элемент с именем Table.TableName.Каждый столбец в строке с ненулевым значением сериализуется как элемент, имя которого является именем столбца, а текстовое содержимое - сериализованным значением столбца.

Это позволяет различать столбец, которыйсодержит пустую строку и одну, которая содержит ноль (то есть DBNull.Value): столбец содержит пустую строку, если для него есть пустой элемент, и содержит нуль, если его нет.

0 голосов
/ 12 февраля 2011

Нет правильного ответа: вы можете сделать свой собственный выбор. (Схема XML, в своей мудрости, предоставляет еще один способ представления отсутствующих данных, а именно как <address2 xsi:nil="true"/>. Я никогда не видел необходимости в этом, но я упоминаю это для полноты.)

Я разделяю ваше мнение, что начинать с имен полей "address1" и "address2" - довольно плохая практика. Он предлагает какое-то наследие от систем, которые не допускают повторение полей, и не имеет места в дизайне XML.

На самом деле, я думаю, что многие поля естественно многозначны. У человека может быть ноль или более телефонных номеров, и это означает, что если у нас нет телефонного номера для человека, наиболее естественным представлением (на мой взгляд) является отсутствие вхождения элемента <phone>.

Конечно, есть некоторые случаи, когда вы хотите отличить свойство, значением которого является строка нулевой длины, от свойства, которое отсутствует или неизвестно, хотя я думаю, что это менее распространено, чем теоретики реляционных баз данных заставили бы нас верить. Но в этом случае вам нужны разные представления для двух случаев. (Возможно, вы также захотите отличить «отсутствующий» от «неизвестный» - есть разница между знанием того, что у кого-то нет среднего имени, и незнанием, есть ли у него второе имя, - но на практике очень немногие системы способны поддерживать качество данных для этого точность, и если вы хотите это сделать, я подозреваю, что вы хотите использовать более сильный сигнал, чем просто пустой или пропущенный элемент.)

...