Поделиться через


Примечания по реализации поддержки типов 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.

См. также