Changements dans le comportement d’analyse et d’émission de XML (En attente)

Attention

Ce changement de comportement fait partie du 2025_01 bundle.

Pour connaître le statut actuel du bundle, reportez-vous à Historique du bundle.

Lorsque ce bundle de changements de comportement est activé, l’analyse et l’émission de contenu XML changent lors de l’utilisation de la commande COPY INTO <table> avec le format de fichier XML et lors de l’appel des fonctions suivantes :

Avant la modification:

Comportement d’analyse et d’émission de XML :

  • Certaines requêtes qui appellent la fonction CHECK_XML renvoient une chaîne avec un message d’erreur.

  • Certaines requêtes qui appellent la fonction PARSE_XML échouent.

Après la modification:

Comportement d’analyse et d’émission de XML :

  • Certaines requêtes qui renvoyaient une chaîne avec un message d’erreur lors de l’appel de la fonction CHECK_XML avant la modification renvoient désormais NULL.

  • Certaines requêtes qui échouaient lors de l’appel de la fonction PARSE_XML avant la modification réussissent désormais, et la fonction renvoie le XML analysé.

  • Les requêtes avec des chaînes XML contenant des chevrons ou des apostrophes renvoient des résultats différents après la modification.

  • Les requêtes avec des chaînes XML contenant des espaces blancs ou des attributs XML relatifs à la préservation de l’espace blanc renvoient des résultats différents après la modification.

Les sections suivantes fournissent plus de détails sur les modifications.

Analyse de contenu XML comportant des instructions de traitement

L’exemple suivant utilise la fonction PARSE_XML pour analyser un contenu XML dont les instructions de traitement comportent des points d’interrogation :

SELECT PARSE_XML('<?PITarget PIContent ??><mytag />') AS mytag;
Copy
Renvoyé avant la modification ::
100100 (22P02): Error parsing XML: prematurely terminated XML document in processing instructions, pos 33
Renvoyé après la modification ::
+-----------------+
| MYTAG           |
|-----------------|
| <mytag></mytag> |
+-----------------+

Analyse de contenu XML qui comporte des chevrons ou des apostrophes

L’exemple suivant utilise la fonction PARSE_XML pour analyser un contenu XML comportant des chevrons et des apostrophes dans les valeurs d’attribut XML. Après la modification, les apostrophes et les chevrons dans les valeurs d’attribut XML sont correctement échappés dans la valeur de retour et dans le XML émis :

SELECT PARSE_XML('<mytag myattr="&lt;&gt;\'"/>') AS mytag;
Copy
Renvoyé avant la modification ::
+------------------------------+
| MYTAG                        |
|------------------------------|
| <mytag myattr="<>'"></mytag> |
+------------------------------+
Renvoyé après la modification ::
+-----------------------------------------+
| MYTAG                                   |
|-----------------------------------------|
| <mytag myattr="&lt;&gt;&apos;"></mytag> |
+-----------------------------------------+

Analyse de contenu XML comportant des entités définies par l’utilisateur

L’exemple suivant utilise la fonction PARSE_XML pour analyser un contenu XML comportant des entités définies par l’utilisateur :

SELECT PARSE_XML('<!DOCTYPE doc [<!ENTITY placeholder "some text">]><doc>&placeholder;</doc>')
  AS placeholder;
Copy
Renvoyé avant la modification ::
100100 (22P02): Error parsing XML: unknown entity &placeholder;, pos 68
Renvoyé après la modification ::
+-------------------------------------------------------------+
| PLACEHOLDER                                                 |
|-------------------------------------------------------------|
| <!DOCTYPE doc [<!ENTITY placeholder "some                   |
| text">]><doc>some text</doc>                                |
+-------------------------------------------------------------+

Analyse de contenu XML qui préserve l’espace blanc

Cette modification a été apportée pour que le comportement de Snowflake corresponde à la spécification XML en ce qui concerne la préservation de l’espace blanc :

  • Avant la modification, l’espace blanc est préservé pour l’attribut xsl:space="preserve". Après la modification, l’espace blanc n’est pas préservé pour l’attribut xsl:space="preserve".

  • Avant la modification, l’espace blanc n’est pas préservé pour l’attribut xml:space="preserve". Après la modification, l’espace blanc est préservé pour l’attribut xml:space="preserve".

L’exemple suivant utilise la fonction PARSE_XML pour analyser un contenu XML et spécifier l’attribut xsl:space="preserve" :

SELECT PARSE_XML('<mytag xsl:space="preserve"> my content </mytag>')
  AS space_preserve;
Copy
Renvoyé avant la modification ::
+--------------------------------------------------+
| SPACE_PRESERVE                                   |
|--------------------------------------------------|
| <mytag xsl:space="preserve"> my content </mytag> |
+--------------------------------------------------+
Renvoyé après la modification ::
+--------------------------------------------------+
| SPACE_PRESERVE                                   |
|--------------------------------------------------|
| <mytag xsl:space="preserve">my content</mytag>   |
+--------------------------------------------------+

L’exemple suivant utilise la fonction PARSE_XML pour analyser un contenu XML et spécifier l’attribut xml:space="preserve" :

SELECT PARSE_XML('<mytag xml:space="preserve"> my content </mytag>')
  AS space_preserve;
Copy
Renvoyé avant la modification ::
+--------------------------------------------------+
| SPACE_PRESERVE                                   |
|--------------------------------------------------|
| <mytag xml:space="preserve">my content</mytag>   |
+--------------------------------------------------+
Renvoyé après la modification ::
+--------------------------------------------------+
| SPACE_PRESERVE                                   |
|--------------------------------------------------|
| <mytag xml:space="preserve"> my content </mytag> |
+--------------------------------------------------+

Chargement de contenu XML qui préserve l’espace blanc

L’exemple suivant charge des données dans une table à l’aide de la commande COPY INTO <table>. Le paramètre PRESERVE_SPACE est défini sur TRUE pour préserver l’espace blanc :

COPY INTO mytable
  FROM @my_xml_stage
  FILE_FORMAT = (TYPE = 'XML' PRESERVE_SPACE = TRUE);
Copy
Contenu chargé avant la modification ::
+--------------------------------------------------+
| SPACE_PRESERVE                                   |
|--------------------------------------------------|
| <mytag xsl:space="preserve"> my content </mytag> |
+--------------------------------------------------+
Contenu chargé après la modification ::
+--------------------------------------------------+
| SPACE_PRESERVE                                   |
|--------------------------------------------------|
| <mytag xml:space="preserve"> my content </mytag> |
+--------------------------------------------------+

Avant et après la modification, le contenu conserve l’espace blanc, mais l’attribut xsl:space="preserve" devient xml:space="preserve".

Réf : 1862