Notas de implementação de suporte de tipo XML

Este tópico descreve alguns detalhes de implementação dos quais você deseja estar ciente.

Mapeamentos de lista

Os tipos IList, ICollection, IEnumerable, Tipo[], e String são usados para representar tipos de lista da linguagem de definição de esquema XML (XSD).

Mapeamentos de união

Os tipos de união são representados usando o tipo XmlAtomicValue ou String. O tipo de origem ou o tipo de destino deve, portanto, ser sempre um String ou XmlAtomicValue.

Se o XmlSchemaDatatype objeto representar um tipo de lista, o objeto converterá o valor da cadeia de caracteres de entrada em uma lista de um ou mais objetos. Se XmlSchemaDatatype representar um tipo união, uma tentativa será feita para analisar o valor de entrada como um tipo membro da união. Se a tentativa de análise falhar na conversão será tentada com o membro a seguir de união e assim por diante até que a conversão foi bem-sucedida, ou não há nenhum outro tipo do membro a tentar nesse caso, uma exceção é lançada.

Diferenças entre tipos de dados CLR e XML

A seguir, descreve determinadas incompatibilidades que podem ocorrer entre tipos CLR e tipos de dados XML e como elas são tratadas.

Observação

O prefixo xs é mapeado para o https://www.w3.org/2001/XMLSchema e o URI de namespace.

System.TimeSpan e xs:duration

O xs:duration tipo é parcialmente ordenado porque há determinados valores de duração diferentes, mas equivalentes. Isso significa que para o valor do tipo xs:duration, como um mês (P1M), é menor que 32 dias (P32D), maior que 27 dias (P27D) e equivalente a 28, 29 ou 30 dias.

A TimeSpan classe não dá suporte a essa ordenação parcial. Em vez disso, ele escolhe um número específico de dias para 1 ano e 1 mês; 365 dias e 30 dias, respectivamente.

Para obter mais informações sobre o xs:duration tipo, consulte o esquema XML W3C Parte 2: Recomendação de tipos de dados.

xs:time, tipos gregorianos de data, e System.DateTime

Quando um xs:time valor é mapeado para um DateTime objeto, o MinValue campo é usado para inicializar as propriedades de data do DateTime objeto (como Year, Monthe Day) para o menor valor possível DateTime .

Da mesma forma, instâncias de xs:gMonth, xs:gDaye xs:gYearxs:gYearMonthxs:gMonthDay também são mapeadas para um DateTime objeto. As propriedades não utilizados no DateTime objeto são inicializadas para as de MinValue.

Observação

Você não pode confiar no DateTime.Year valor quando o conteúdo é digitado como xs:gMonthDay. O DateTime.Year valor é sempre definido como 1904 nesse caso.

xs:anyURI e System.Uri

Quando uma instância que xs:anyURI representa um URI relativo é mapeada para um Uri, o Uri objeto não tem um URI base.

Consulte também