Quels sont les espaces de noms XML?

C’est quelque chose que je trouve toujours un peu difficile à expliquer aux autres: Pourquoi existe-t-il des espaces de noms XML? Quand devrions-nous les utiliser et quand ne devrions-nous pas? Quels sont les pièges courants lorsque vous travaillez avec des espaces de noms en XML?

En outre, comment sont-ils liés aux schémas XML? Les schémas XSD doivent-ils toujours être associés à un espace de noms?

Ils permettent de combiner plusieurs langages de balisage sans se soucier des conflits de noms d’éléments et d’atsortingbuts.

Par exemple, regardez n’importe quel code XSLT, puis réfléchissez à ce qui arriverait si vous n’utilisiez pas d’espaces de noms et que vous essayiez d’écrire un XSLT où la sortie devait contenir des éléments “template”, “for-each”, etc. . Erreurs de syntaxe, c’est quoi.

Je laisserai les conseils et les pièges à d’autres avec plus d’expérience que moi.

C’est presque la même chose que de demander “pourquoi utilisons-nous des paquets pour Java / C #?”:

  • réutilisabilité : vous pouvez réutiliser un ensemble de balises / atsortingbuts que vous définissez sur différents types de documents XML.
  • modularité : si vous avez besoin d’append un “aspect” à votre XML; L’ajout d’un espace de noms à votre document XML est plus simple que de modifier toute la définition de votre schéma XML.
  • Évitez de polir l’espace de noms “principal” : vous ne forcez pas votre parsingur à travailler avec une énorme définition de schéma, utilisez simplement l’espace de noms dont vous avez besoin.

Pourquoi les espaces de noms XML existent-ils?

Parce que, en 1997, des personnes très influentes du W3C les voulaient et ne voulaient pas recevoir de réponse. Même quand cela a été démontré, j’ose dire de manière concluante qu’il y avait de meilleurs moyens de résoudre le “problème” qu’ils pensaient avoir, ils exerçaient encore leur influence pour que leurs désirs soient consignés dans une recommandation du W3C.

Le plus grand avantage de la mythologie qui entoure désormais les espaces de noms XML est qu’ils ont un mérite technique. (Ceci est l’effet en aval d’une recommandation qui existe simplement et occupe ainsi l’espace mental – “bon, il y a une (bonne) raison!” – par opposition à une note de bas de page oubliable quelque part.)

Beaucoup de douleur, pas de gain .

Quand devrions-nous les utiliser et quand ne devrions-nous pas?

Vous ne devriez jamais les utiliser si vous pouvez l’aider. Malheureusement, la promotion incessante de ce périphérique BAD [*] par les parties intéressées a suscité aujourd’hui un cluster de spécifications qui rend pratiquement impossible de ne pas avoir à faire face à des espaces de noms XML à un moment ou à un autre. Donc, même si vous évitez les espaces de noms XML vous-même, vous trouverez des messages incrustés dans les espaces de noms de toutes les directions, ou pire, des jeux d’outils qui refusent tout simplement de fonctionner à moins que vous ne leur fournissiez un tel contenu.

Quels sont les pièges courants lorsque vous travaillez avec des espaces de noms en XML?

Un écueil très courant consiste à utiliser des expressions Xpath avec des documents où un espace de noms a été “par défaut”: l’espace de noms devra être explicite dans les expressions. Un autre problème est de les utiliser “correctement” lors de la construction de documents: ils créent des problèmes en apparence .

En outre, comment sont-ils liés aux schémas XML? Les schémas XSD doivent-ils toujours être associés à un espace de noms?

Il n’y a pas de relation nécessaire, sauf que la spécification de schéma XSD a été développée à une époque où à peu près tous les membres du comité disposaient des espaces de noms XML. Donc, ils ont travaillé aussi profondément que possible. Il est néanmoins possible d’utiliser des schémas XSD sans espaces de noms, mais il s’agit d’un slog raide car presque tous les jeux d’outils prenant en charge les schémas XSD supposent que vous voulez utiliser des espaces de noms.

[*] MAUVAIS = cassé comme conçu

MISE À JOUR: Un ancien essai sur cette non-solution à un non-problème .

Le plus gros piège, à mon humble avis, est l’interprétation de documents sur l’interaction entre humains, par exemple pour développer un code permettant de traiter un document XML. Il est trop facile de se concentrer sur l’expression littérale du document plutôt que sur le résultat de l’ensemble d’informations de l’parsing du document.

par exemple les nœuds suivants

   

sont tous sémantiquement identiques – mais très différents des yeux naïfs.

Le premier exemple génère une erreur très courante lors du développement de XPaths – à défaut du fait que “a” se trouve dans un espace de noms – donc // ne donne aucun résultat. (ou pire encore, en faisant correspondre les nœuds dans un espace de noms différent!)

Le troisième exemple ouvre une autre faille dans la compréhension – le texte du préfixe est sémantiquement significatif. Lors de l’parsing de documents avec XPATH, je peux déclarer n’importe quel préfixe que j’aime pour la correspondance, à condition qu’il corresponde à ceux du document.

Considérez-les comme des noms de famille pour les types d’éléments. Si vous avez deux amis qui ont tous deux appelé Bob et que vous parlez de l’un d’entre eux, quelqu’un pourrait vous demander de quel Bob vous parlez. Le simple fait de dire “Bob” n’est pas très utile, alors vous dites “Bob Smith” ou “Bob Jones”.

C’est la même chose avec les types d’éléments. Parfois, un nom court ne suffit pas, car différentes personnes peuvent choisir le même nom. Vous incluez donc un URI comme “nom de famille”, pour distinguer les différents Bobs.

XML est un super langage, ce qui signifie qu’il est la base de tout langage basé sur XML (a du sens, non?). Considérez XML comme un stylo capable d’écrire n’importe quelle phrase, dans n’importe quelle langue. Tout dépend de l’auteur et, de préférence, la langue devrait être connue du lecteur.

Un espace de noms XML est essentiellement le nom du langage, un peu comme “English” ou “עברית”. J’aide le destinataire du document XML à l’parsingr et à en extraire les informations.

Disons que j’ai une usine de meubles et que vous avez un magasin de meubles. votre application de stockage et mon application de fourniture n’ont aucun lien, mais lorsqu’ils communiquent via des messages XML, ils doivent être compréhensibles et facilement analysés des deux côtés

Par conséquent, les deux systèmes doivent connaître le schéma , qui définit la syntaxe du langage et les ressortingctions convenues. Considérez le schéma comme le manuel de dictionnaire et de grammaire. Le schéma est le document que les deux systèmes doivent connaître, celui qui écrit le code d’parsing dans chaque système doit le savoir, et cela inclut la déclaration de l’espace de noms.

Chaque espace de noms est nommé en tant qu’URI, ce qui correspond dans la plupart des cas à l’emplacement du document de schéma qui le définit.

Bien entendu, tous les documents XML n’ont pas besoin d’espace de noms, surtout quand ils ne sont pas utilisés pour transmettre des informations à un système distant. Par exemple, lorsque vous sérialisez des objects en XML pour les conserver dans votre firebase database.

Nous utilisons des espaces de noms car les gens veulent utiliser les mêmes mots pour désigner différentes choses dans leur propre idaho privé. Habituellement, vous pouvez déterminer par contexte ce que signifie une personne. Dans une firebase database du personnel, le XML est constitué de dossiers personnels. Dans une firebase database de registre de véhicules, le fichier XML est un registre de véhicules.

Les deux gardent une balise nommée “location”, mais la balise signifie des choses différentes pour chacun et contient des champs différents.

Maintenant, c’est cool: mais que faire si vous avez besoin ou souhaitez stocker du XML à la fois dans la même firebase database? Ou, plus intéressant encore, que se passe-t-il si les deux bases de données veulent stocker des blocs XML à partir d’une autre firebase database commune (par exemple, une firebase database de comptes).

Les espaces de noms XML associent à chaque balise XML un URI, de sorte que le nom de la balise lui-même comporte une URL, qui fait partie du nom de la balise (bien sûr, les documents XML réels utilisent un raccourci). En choisissant soigneusement l’URI, il est facile d’être sûr que les noms de tag n’entreront pas en collision – c’est comme si les deux tags d’emplacement étaient nommés de manière totalement différente, donc il n’y a pas de confusion. En prime, les deux balises d’emplacement entièrement différentes peuvent inclure des éléments de la firebase database des comptes et indiquer explicitement qu’elles parlent de la même chose.

La chose qui rend tout cela utile est XPATH.

Avec ce qui précède, vous pouvez commencer à écrire des expressions XPATH qui disent des choses comme: trouvez-moi des accounts:account overdue sections en accounts:account overdue n’importe où dans ce xml. Ou: trouvez-moi des accounts:warning message éléments de accounts:warning message dans ce bloc particulier de XML, où le message d’avertissement est un nœud enfant (même profond) d’un nœud personnel:payment ou d’un vehicle:status .

Cette expression XPATH peut être utilisée quelque part dans un document XSLT, dont le travail consiste à convertir le XML en XHTML ou XPDF, pour l’afficher.

Quel est le gain? Pourquoi le faire? Comme vous pouvez effectuer une recherche dans le fichier journal XML, extrayez tous les messages en retard où qu’ils apparaissent, sans les confondre avec les balises “message” produites par d’autres systèmes , convertissez-les en xhtml et affichez-les en gras via une balise css: all sans écrire un bout de code de procédure .

Par exemple: espaces de noms XML par exemple

Dans mes mots: Si vous devez utiliser un format XML pour une société externe (par exemple) et que vous avez besoin de fournir des informations dans un document XML, qui porte le même nom, vous avez besoin d’un espace de noms. Exemple:

  

et vous souhaitez fusionner certaines données dans ce document, qui a le même nom, mais un autre sens (donc valeur à), vous devez utiliser un espace de noms:

  

Bien sûr – vous pouvez changer le nom de l’atsortingbut. Par exemple à “my_unique_color”. Bud dans un autre document, il peut y avoir un atsortingbut avec le même nom à nouveau. Donc, si vous avez un espace de noms unique (notre domaine web par exemple), vous pouvez toujours utiliser les mêmes noms d’éléments et / ou atsortingbuts sans aucun problème.

De la recommandation W3 …

Les espaces de noms XML fournissent une méthode simple pour qualifier les noms d’éléments et d’atsortingbuts utilisés dans les documents Extensible Markup Language en les associant aux espaces de noms identifiés par des références URI.

Les espaces de noms sont utilisés pour désambiguïser les noms que vous utilisez dans le document. Il vous donne également la possibilité de lier un nom court à un espace de nom qui peut ensuite être utilisé pour faire référence à un élément ou à un atsortingbut distant. L’espace de nom lui-même fait référence à l’emplacement qui définit les éléments et les atsortingbuts que vous utilisez dans le document. Il y a beaucoup plus à savoir, mais c’est le coeur de tout cela. Il y a beaucoup plus d’informations ici .