Как интерпретировать значения по умолчанию примитивных типов в XSD, когда minoccurs = 0 - PullRequest
1 голос
/ 27 октября 2011

Внутри xs: complexType есть элементы:

Запустив инструменты .NET, такие как SvcUtil.exe, вы получите класс, украшенный DataContractAttribute, содержащий свойства: public string RegistrationNumber {get; set;} public DateTimeExpiryDate {get; set;} публичный DateTime?RegistrationEndDate {get; set;}

В чем загадка: если полученный экземпляр XML не связывается с этими 3 элементами, очевидно, будут использоваться значения по умолчанию, хотя значения по умолчанию явно не определены в XSD.Какие значения по умолчанию для строки и даты и времени?

Чтобы обновить память deem, я смотрю на

http://www.w3.org/TR/xmlschema-0/

2.2.1

InТаким образом, различия между значениями по умолчанию для элементов и атрибутов можно указать следующим образом: значения атрибутов по умолчанию применяются, когда атрибуты отсутствуют, и значения элементов по умолчанию применяются, когда элементы пусты.

Так что, если значение по умолчанию не определено явно, иэлемент пуст / отсутствует?

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

Для типов данных, таких как integer и boolean, значения по умолчанию очевидны: 0 и false.Четко определено с первого дня электронных вычислений.

Но для строки и даты и времени ситуация немного сложна, в основном потому, что разные языки имеют разные структуры и соглашения для строки и даты и времени.

считаете, что мое понимание правильное?

В MSDN о DataMemberAttribute.EmitDefaultValue есть утверждение:

"Установка для свойства EmitDefaultValue значения false не рекомендуется. Это следует делать только в том случае, еслиэто особая необходимость (например, для обеспечения взаимодействия или уменьшения размера данных). "

Можете ли вы сказать мне, почему это не рекомендуется?скажем, звучит как MS рекомендует испускать каждый элемент независимо от того, если minOccurs = 0 в XML-сообщении?

Спасибо

Энди

1 Ответ

0 голосов
/ 12 ноября 2011

если элемент отсутствует в документе XML, то в памяти не должно быть объектов, представляющих его.Думайте о любом элементе, где схема имеет minOccurs или maxOccurs, как по определению список.Если его minOccurs = 0, maxOccurs = 1, мы считаем его необязательным, но на самом деле это список, содержащий не более одного элемента.Таким образом, структура данных, представляющая это, должна быть списком (или массивом с переменными границами или ...).Тогда вопрос о его значении не имеет смысла, и в спецификации нет никакой двусмысленности.

Если SvcUtil.exe этого не делает, я не думаю, что это правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...