Примечания по реализации поддержки типов XML
В этом разделе описываются определенные детали реализации, которые следует знать.
Сопоставление списков
Типы IList, ICollection, IEnumerable, Type[] и String используются для представления типов списков языка XSD.
Сопоставление объединений
Типы объединений представляются с помощью типов XmlAtomicValue или String. Следовательно, исходный тип или тип назначения всегда должны принадлежать либо к типу String, либо к типу XmlAtomicValue.
Если объект XmlSchemaDatatype представляет тип списка, этот объект преобразует входное строковое значение в список, состоящий из одного или нескольких объектов. Если объект XmlSchemaDatatype представляет тип объединения, тогда предпринимается попытка проанализировать входное значение как тип элемента объединения. В случае сбоя попытки синтаксического анализа предпринимается попытка преобразования следующего элемента объединения и т. д. - до тех пор, пока преобразование не будет успешным или пока не останется других типов элементов. В последнем случае возникает исключение.
Различия между типами данных CLR и XML
Ниже описывается ряд несоответствий, которые могут возникать между типами данных CLR и XML, и о том, как они преодолеваются.
Примечание.
Префикс xs
сопоставляется с https://www.w3.org/2001/XMLSchema и URI пространства имен.
System.TimeSpan и xs:duration
Тип xs:duration
частично упорядочен в том смысле, что в нем представлены некоторые значения длительности, отличные друг от друга, но эквивалентные. Это означает, что для типа xs:duration
значение 1 месяц (P1M) меньше чем 32 дня (P32D), больше чем 27 дней (P27D) и эквивалентно 28, 29 или 30 дням.
Класс TimeSpan не поддерживает такое частичное упорядочение. Он предполагает использование определенного числа дней для 1 года и для 1 месяца: 365 дней и 30 дней соответственно.
Дополнительные сведения о типе xs:duration
см. в документе W3C XML Schema Part 2: Datatypes Recommendation (Рекомендация W3C по схемам XML. Часть 2. Типы данных).
Типы данных xs:time, григорианского календаря и System.DateTime
Когда значение xs:time
сопоставляется с объектом DateTime, поле MinValue используется для инициализации свойств даты объекта DateTime (таких как Year, Month и Day) наименьшим из возможных значений DateTime.
Подобным же образом экземпляры типов xs:gMonth
, xs:gDay
, xs:gYear
, xs:gYearMonth
и xs:gMonthDay
сопоставляются с объектом DateTime. Неиспользованные свойства объекта DateTime получают значения поля MinValue.
Примечание.
Не следует полагаться на значение свойства DateTime.Year, когда содержимое типизируется как xs:gMonthDay
. Значение свойства DateTime.Year в этом случае всегда устанавливается равным 1904.
Типы данных xs:anyURI и System.Uri
Когда экземпляр xs:anyURI
, представляющий относительный идентификатор URI, сопоставляется с объектом Uri, объект Uri не имеет базового идентификатора URI.