Notas de implementación de la compatibilidad con tipos XML

En este tema se describen algunos detalles de la implementación que debería conocer.

Asignaciones de listas

Los tipos IList, ICollection, IEnumerable, Type[] y String se utilizan para representar tipos de listas del lenguaje de definición de esquema XML (XSD).

Asignaciones de uniones

Los tipos de uniones se representan mediante el tipo XmlAtomicValue o String. Por lo tanto, el tipo de origen o el tipo de destino deben ser siempre String o XmlAtomicValue.

Si el objeto XmlSchemaDatatype representa un tipo de lista, dicho objeto convierte el valor de la cadena de entrada en una lista de uno o más objetos. Si XmlSchemaDatatype representa un tipo de unión, se realiza un intento de analizar el valor de entrada como un tipo de miembro de la unión. Si el intento de análisis produce un error, se intenta realizar la conversión con el siguiente miembro de la unión y así sucesivamente, hasta que la conversión se realice correctamente o no haya ningún otro tipo de miembro que probar, en cuyo caso se inicia una excepción.

Diferencias entre tipos de datos XML y CLR

A continuación se describen determinadas diferencias que se podrían producir entre los tipos de datos XML y los tipos CLR y cómo se tratan.

Nota

El prefijo xs está asignado a https://www.w3.org/2001/XMLSchema y al URI del espacio de nombres.

System.TimeSpan y xs:duration

El tipo xs:duration está parcialmente ordenado, ya que hay determinados valores de duración que son diferentes, pero equivalentes. Eso significa que para el valor del tipo xs:duration, por ejemplo 1 mes (P1M), es menor que 32 días (P32D), mayor que 27 días (P27D) y equivalente a 28, 29 o 30 días.

La clase TimeSpan no admite esta ordenación parcial. En su lugar, toma un número de días específico para 1 año y 1 mes; 365 días y 30 días, respectivamente.

Para obtener más información sobre el tipo xs:duration, vea XML Schema Part 2: Datatypes Recommendation (Parte 2 del esquema XML: recomendación de tipos de datos) del W3C.

xs:time, tipos de fechas gregorianas y System.DateTime

Cuando se asigna un valor xs:time a un objeto DateTime, el campo MinValue se utiliza para inicializar las propiedades de fecha del objeto DateTime (por ejemplo, Year, Month y Day) con el valor DateTime más pequeño posible.

Igualmente, las instancias de xs:gMonth, xs:gDay, xs:gYear, xs:gYearMonth y xs:gMonthDay también se asignan a un objeto DateTime. Las propiedades no utilizadas del objeto DateTime se inicializan con las de MinValue.

Nota

No puede confiar en el valor de DateTime.Year si el contenido tiene el tipo xs:gMonthDay. El valor de DateTime.Year siempre está establecido en 1904 en este caso.

xs:anyURI y System.Uri

Cuando se asigna una instancia de xs:anyURI que representa un identificador URI relativo a Uri, el objeto Uri no tiene un identificador URI básico.

Vea también