Compartir a través de


Restricciones de patrones y formas canónicas

La faceta de patrón XSD permite la restricción del espacio léxico de tipos simples. Cuando se coloca una restricción de patrón en un tipo para el que hay más de una posible representación léxica, algunos valores podrían provocar un comportamiento inesperado tras la validación.

Este comportamiento se produce porque las representaciones léxicas de estos valores no se almacenan en la base de datos. Por lo tanto, los valores se convierten en sus representaciones canónicas cuando se serializan como salida. Si un documento contiene un valor cuyo formato canónico no cumple la restricción de patrón para su tipo, el documento se rechaza si un usuario intenta volver a insertarlo.

Para evitar esto, SQL Server rechaza cualquier documento XML que contenga valores que no se puedan reinsertar, debido a la infracción de restricciones de patrones por sus formularios canónicos. Por ejemplo, el valor "33.000" no se valida con un tipo derivado de xs:decimal con una restricción de patrón de "33\.0+". Aunque "33.000" cumple este patrón, la forma canónica , "33", no.

Por lo tanto, debe tener cuidado al aplicar facetas de patrón a tipos derivados de los siguientes tipos primitivos: boolean, decimal, float, double, dateTime, time, date, hexBinary y base64Binary. SQL Server emite una advertencia al agregar dichos componentes a una colección de esquemas.

La serialización imprecisa de valores de punto flotante tiene un problema similar. Debido al algoritmo de serialización de punto flotante usado por SQL Server, es posible que los valores similares compartan la misma forma canónica. Cuando se serializa un valor de punto flotante y, a continuación, se vuelve a insertar, su valor puede cambiar ligeramente. En raras ocasiones, esto puede dar lugar a un valor que infringe cualquiera de las siguientes facetas para su tipo en la reinserción: enumeración, minInclusive, minExclusive, maxInclusive o maxExclusive. Para evitar esto, SQL Server rechaza los valores de tipos derivados de xs:float o xs:double que no se pueden serializar y reinsertar.

Véase también

Requisitos y limitaciones de las colecciones de esquemas XML en el servidor