Condividi tramite


Forme canoniche e restrizioni di pattern

Il facet basato su pattern XSD consente la restrizione dello spazio lessicale di tipi semplici. Quando viene applicata una restrizione di pattern a un tipo per il quale esistono più rappresentazioni lessicali possibili, alcuni valori potrebbero causare un comportamento imprevisto al momento della convalida.

Tale comportamento si verifica in quanto le rappresentazioni lessicali di questi valori non vengono archiviate nel database. Pertanto, i valori vengono convertiti nelle rappresentazioni canoniche corrispondenti quando serializzati come output. Se un documento contiene un valore la cui forma canonica non è conforme alla restrizione di pattern per il tipo corrispondente, il documento verrà rifiutato nel caso in cui un utente tenti di reinserirlo.

Per evitare questo problema, SQL Server rifiuta qualsiasi documento XML contenente valori che non possono essere reinsertati, a causa della violazione delle restrizioni del modello dai moduli canonici. Ad esempio, il valore "33.000" non viene convalidato rispetto a un tipo derivato da xs:decimal con una restrizione del modello "33\.0+". Sebbene il valore "33.000" sia conforme a tale pattern, la forma canonica "33" non lo è.

Di conseguenza, è necessario prestare attenzione quando si applicano facet basati su modelli a tipi derivati dai seguenti tipi primitivi: boolean, decimal, float, double, dateTime, time, date, hexBinary e base64Binary. SQL Server genera un avviso quando si aggiungono componenti di questo tipo a una raccolta di schemi.

Per la serializzazione imprecisa di valori a virgola mobile esiste un problema analogo. A causa dell'algoritmo di serializzazione a virgola mobile usato da SQL Server, è possibile che i valori simili condividono la stessa forma canonica. Quando un valore a virgola mobile viene serializzato e quindi reinserito, potrebbe subire una leggera variazione. In casi rari, il risultato può essere un valore che viola uno dei facet seguenti per il tipo corrispondente al momento del reinserimento: enumeration, minInclusive, minExclusive, maxInclusiveo maxExclusive. Per evitare questo problema, SQL Server rifiuta tutti i valori dei tipi derivati da xs:float o xs:double che non possono essere serializzati e reinsertati.

Vedere anche

Requisiti e limitazioni per le raccolte di XML Schema nel server