Forme canoniche e restrizioni di patternCanonical Forms and Pattern Restrictions

Il facet basato su pattern XSD consente la restrizione dello spazio lessicale di tipi semplici.The XSD pattern facet allows for the restriction of the lexical space of simple types. 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.When a pattern restriction is put on a type for which there is more than one possible lexical representation, some values could cause unexpected behavior upon validation.

Tale comportamento si verifica in quanto le rappresentazioni lessicali di questi valori non vengono archiviate nel database.This behavior occurs because lexical representations of these values are not stored in the database. Pertanto, i valori vengono convertiti nelle rappresentazioni canoniche corrispondenti quando serializzati come output.Therefore, the values are converted to their canonical representations when serialized as 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.If a document contains a value whose canonical form does not comply with the pattern restriction for its type, the document is rejected if a user tries to reinsert it.

Per evitare tale problema, SQL ServerSQL Server rifiuta qualsiasi documento XML contenente valori che non è possibile reinserire, a causa della violazione delle restrizioni di pattern da parte delle forme canoniche corrispondenti.To prevent this, SQL ServerSQL Server rejects any XML document that contains values that cannot be reinserted, because of the violation of pattern restrictions by their canonical forms. Ad esempio, il valore "33,000" non verrà convalidato in base a un tipo derivato da xs:decimal con una restrizione di pattern "33\,0+".For example, the value "33.000" does not validate against a type derived from xs:decimal with a pattern restriction of "33\.0+". Sebbene il valore "33.000" sia conforme a tale pattern, la forma canonica "33" non lo è.Although "33.000" complies with this pattern, the canonical form, "33", does not.

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, hexBinarye base64Binary.Therefore, you should be careful when you apply pattern facets to types derived from the following primitive types: boolean, decimal, float, double, dateTime, time, date, hexBinary, and base64Binary. SQL ServerSQL Server viene generato un avviso quando tali componenti vengono aggiunti a una raccolta di schemi. issues a warning when you add any such components to a schema collection.

Per la serializzazione imprecisa di valori a virgola mobile esiste un problema analogo.Imprecise serialization of floating-point values has a similar problem. A causa dell'algoritmo di serializzazione per i valori a virgola mobile utilizzato da SQL ServerSQL Server, è possibile che valori simili condividano la stessa forma canonica.Because of the floating-point serialization algorithm used by SQL ServerSQL Server, it is possible for similar values to share the same canonical form. Quando un valore a virgola mobile viene serializzato e quindi reinserito, potrebbe subire una leggera variazione.When a floating-point value is serialized and then reinserted, its value may change slightly. 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.In rare cases, this may result in a value that violates any of the following facets for its type on reinsertion: enumeration, minInclusive, minExclusive, maxInclusive, or maxExclusive. Per evitare tale problema, SQL ServerSQL Server rifiuta i valori di tipi derivati da xs:float o xs:double che non è possibile da serializzare e reinserire.To prevent this, SQL ServerSQL Server rejects any values of types derived from xs:float or xs:double that cannot be serialized and reinserted.

Vedere ancheSee Also

Requisiti e limitazioni per l'utilizzo di raccolte di XML Schema nel serverRequirements and Limitations for XML Schema Collections on the Server