Question

C’est quelque chose que je trouve toujours un peu difficile à expliquer aux autres: Pourquoi les espaces de noms XML existent-ils? Quand devrions-nous les utiliser et quand ne devrions-nous pas? Quels sont les pièges les plus courants lors de l'utilisation d'espaces de noms en XML?

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

Était-ce utile?

La solution

Ils permettent de combiner plusieurs langages de marquage sans avoir à se soucier des conflits de noms d'élément et d'attribut.

Par exemple, examinez n'importe quel morceau de code XSLT, puis pensez à ce qu'il se passerait si vous n'utilisiez pas d'espaces de nom et tentiez d'écrire un XSLT dont le résultat devait contenir "template", "for-each". ;, etc, éléments. Les erreurs de syntaxe, c’est quoi.

Je laisserai les conseils et les pièges à d'autres personnes plus expérimentées que moi.

Autres conseils

Pourquoi les espaces de noms XML existent-ils?

Parce que, en 1997, certaines personnes très influentes du W3C les voulaient et qu’elles n’accepteraient aucune réponse. Même s’il a été démontré, j’ose dire de façon concluante, qu’il existait de meilleurs moyens de résoudre le "problème" ils pensaient l'avoir, ils exerçaient encore leur influence pour que leurs désirs soient consignés dans une recommandation du W3C.

Le plus gros problème de la mythologie désormais étendue entourant les espaces de noms XML est qu’ils ont un intérêt technique. (C’est l’effet en aval d’une recommandation qui existe simplement et qui occupe donc un espace mental - "Bon, il faut une bonne raison!" - par opposition à une note de bas de page oubliable, quelque part.)

Beaucoup de peine sans 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 dispositif BAD [*] par les parties intéressées a favorisé la création de nombreuses spécifications qui rendent pratiquement impossible de ne pas avoir à faire face à des espaces de noms XML à un moment ou à un autre. Ainsi, même si vous évitez les espaces de noms XML vous-même, vous trouverez des informations crud incrustées dans les espaces de noms qui viennent à vous de toutes les directions, ou pire, des outils qui refusent tout simplement de fonctionner si vous ne les nourrissez pas de manière aussi crue.

Quels sont les pièges les plus courants lors de l'utilisation d'espaces de noms en XML?

L’utilisation d’expressions Xpath avec des documents dans lesquels un espace de nom a été "par défaut" constitue un piège très courant: l’espace de nom 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 à partir de rien .

De plus, 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’ya pas de relation nécessaire, si ce n’est que la spécification de schéma XSD a été développée à un moment où presque tous les membres du comité avaient les espaces de noms XML entre les dents. Alors ils ont travaillé aussi profondément que possible. Il est néanmoins possible d’utiliser des schémas XSD sans espaces de noms, mais c’est une tâche ardue car presque tous les outils supportant les schémas XSD supposent que vous "voudrez" et "voudrez". utiliser des espaces de noms.

[*] BAD = Cassé comme prévu

UPDATE: Un vieil essai sur cette non-solution à un non-problème .

C'est presque la même chose que de demander "pourquoi utilisons-nous des packages pour Java / C #?":

  • réutilisabilité : vous pouvez réutiliser un ensemble de balises / attributs que vous définissez dans différents types de documents XML.
  • modularité : si vous devez ajouter un " aspect " à votre XML; L'ajout d'un espace de noms à votre document XML est plus simple que de changer la définition de votre schéma XML entier.
  • Évitez de polluer le " main " espace de noms : vous ne forcez pas votre analyseur à utiliser une définition de schéma énorme, utilisez simplement l'espace de nom dont vous avez besoin.

Le plus grand piège à mon humble avis est l’interprétation des interactions humaines, p. ex. développer du code pour traiter un document XML Doc. Il est trop facile de se concentrer sur l’expression littérale du document plutôt que sur le résultat de l’information défini lors de l’analyse du document.

par exemple. les nœuds suivants

<a xmlns="uri:foo"/>
<foo:a xmlns:foo="uri:foo"/>
<bar:a xmlns:bar="uri:foo"/>

sont tous sémantiquement identiques, mais très différents de l'œil naïf.

Le premier exemple produit une erreur très courante lors du développement de XPaths: il manque le fait que "a" est dans un espace de noms - donc // un ne donne aucune correspondance. (ou pire encore, faire correspondre les nœuds dans un espace de noms différent!)

Le troisième exemple ouvre une autre faille dans la compréhension - que le texte du préfixe est sémantiquement significatif Lors de l'analyse de documents avec XPath, je peux déclarer le préfixe que je préfère, à condition que son uri corresponde à celui du document.

Considérez-les comme des noms de famille pour les types d’éléments. Si vous avez deux amis, tous deux appelés Bob, et que vous parlez de l'un d'eux, quelqu'un pourrait vous demander de quelle Bob vous parlez. Je viens 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ément. Parfois, un nom court ne suffit pas, car différentes personnes peuvent choisir le même nom. Vous devez donc inclure une adresse URI en tant que "nom de famille", afin de distinguer les différents Bobs du monde.

XML est un super-langage, ce qui signifie qu'il constitue la base de tout langage basé sur XML (est logique, non?). Pensez à XML comme un stylo pouvant écrire n'importe quelle phrase, dans n'importe quelle langue. Tout dépend de l'auteur et, de préférence, le lecteur devrait connaître la langue.

Un espace de noms XML est essentiellement le nom de la langue, un peu comme "anglais". ou «& # 1506; & # 1489; & # 1512; & # 1497; & # 1514; " I aide le destinataire du document XML à l'analyser et à extraire les informations qu'il contient.

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 sont complètement indépendantes, mais lorsqu'elles communiquent via des messages XML, les messages doivent être compréhensibles et faciles à analyser par les 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 restrictions convenues. Pensez au schéma en tant que dictionnaire et manuel de grammaire. Le schéma est le document que les deux systèmes doivent connaître, que toute personne qui écrit le code d'analyse syntaxique de chaque système doit savoir, et cela inclut la déclaration de l'espace de nom.

Chaque espace de noms est nommé en tant qu'URI, qui est 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'un espace de noms, en particulier lorsqu'il n'est pas utilisé pour transmettre des informations à un système distant. Par exemple, lorsque vous sérialisez des objets en XML pour les conserver dans votre base de données.

Nous utilisons des espaces de noms parce que les personnes qui souhaitent utiliser les mêmes mots veulent dire différentes choses dans leur propre idaho privé. Habituellement, vous pouvez déterminer dans le contexte ce qu'une personne veut dire. Dans une base de données du personnel, le code XML correspond à des enregistrements de personnel. Dans une base de données d’immatriculation de véhicule, le XML est constitué d’enregistrements d’immatriculation de véhicule.

Tous les deux conservent une balise nommée "emplacement", mais la balise a une signification différente et contient des champs différents.

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

Les espaces de noms XML associent à chaque balise XML un URI, de sorte que le nom de la balise lui-même est précédé d'une URL, qui fait partie du nom de la balise (bien entendu, les documents XML réels utilisent un raccourci pour le faire). En choisissant soigneusement l'URI, il est facile de s'assurer que les noms de balises ne se contrarieront pas - c'est comme si les deux balises d'emplacement avaient été nommées de manière totalement différente, il n'y a donc aucune confusion. En prime, les deux balises d'emplacement totalement différentes peuvent inclure des éléments de la base de données de comptes et indiquer explicitement qu'elles parlent de la même chose.

Ce qui rend tout cela utile, c'est XPATH.

Avec ce qui précède, vous pouvez commencer à écrire des expressions XPATH telles que: trouvez-moi des sections comptes: compte en retard n’importe où dans ce fichier xml. Ou: trouvez-moi tous les éléments comptes: message d'avertissement dans cette partie particulière de XML, où le message d'avertissement est un nœud enfant (quelle que soit sa profondeur) d'un personnel: payment noeud ou un noeud véhicule: statut .

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

Quel est le gain? Pourquoi le faire? Dans la mesure où vous pouvez effectuer une recherche dans le fichier journal XML, extrayez tous les messages des comptes en retard où qu'ils apparaissent, sans les confondre avec "message". balises produites par d’autres systèmes , convertissez-les en xhtml et affichez-les en gras rouge via une balise CSS: le tout sans écrire un bout de code de procédure .

Par exemple: Espaces de nommage XML par exemple

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

<sampleDoc>
   <header title="Hello world!">
      <items>
         <item name="Volvo" color="Blue"/>
      </items>
   </header>
</sampleDoc>

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

<sampleDoc>
   <header title="Hello world!">
      <items>
         <item name="Volvo" color="White" my_unique_namespace:color="#FFFFFF"/>
      </items>
   </header>
</sampleDoc>

Ofcourse - vous pouvez modifier le nom d’un attribut. Par exemple, pour "my_unique_color". Bourgeon dans un autre document, il peut y avoir attribut avec le même nom à nouveau. Ainsi, 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 d'attributs sans aucun problème.

Extrait de la recommandation W3 ...

  

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

Les espaces de noms sont utilisés pour distinguer les noms que vous utilisez dans le document. Il vous donne également la possibilité de lier un nom court à un espace de noms pouvant ensuite être utilisé pour faire référence à un élément ou à un attribut distant. L'espace de noms lui-même fait référence à l'emplacement qui définit les éléments et attributs que vous utilisez dans le document. Il y a beaucoup plus à savoir, mais c'est le cœur du problème. Il existe de nombreuses autres informations ici .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top