web-dev-qa-db-fra.com

createElement vs createElementNS

Quelle est la vraie différence entre ces deux-là? Je veux dire une différence réelle et essentielle. Quel avenir pour createElement régulier?

Svg est xml, pas html. Je comprends ça. Nous utilisons donc createElementNS(ns_string, 'svg') Et puis setAttributeNS(null,,). Pourquoi? Pourquoi pas setAttributeNS('my_ns',,)?

Pourquoi faut-il ns_string être http://www.w3.org/2000/svg et pas une chaîne aléatoire? À quoi sert un espace de noms s'il n'y a qu'un seul espace de noms?

Quel est le but de ns en html normal? Dois-je changer toutes les instances de createElement en createElementNS dans mon code existant?

Je lis la spécification DOM-Level-2 . mais je suis toujours perplexe.

59
CoR

Pour comprendre le problème que les espaces de noms tentent de résoudre, envisagez les extensions de fichier. Les extensions de fichier à 3 lettres ont fait un très mauvais travail de description du contenu des fichiers. Ils sont ambigus et ne portent pas d'informations de version. Les espaces de noms XML utilisent un plus grand espace de chaînes, des URI, pour résoudre le même problème et utilisent des préfixes courts afin que vous puissiez mélanger de manière succincte plusieurs types de XML dans le même document.

À quoi sert l'espace de noms s'il n'y a qu'un seul espace de noms?

Il existe de nombreux espaces de noms utilisés pour identifier différents types de XML et différentes versions de ces types.

SVG et MathML sont deux types de XML ayant chacun leurs propres espaces de noms qui peuvent être incorporés dans HTML5, et ils utilisent souvent XLink, un autre espace de noms XML. De nombreux autres schémas XML, avec des espaces de noms correspondants, sont utilisés pour transmettre des messages entre les clients et les serveurs et pour le stockage des données.

XHTML est une tentative d'exprimer HTML en XML valide. Il a son propre espace de noms.

Nous utilisons donc createElementNS (ns_string, 'svg'), puis setAttributeNS (null ,). Pourquoi? Pourquoi ne pas setAttributeNS ('my_ns' ,) ???

Vous devriez probablement essayer d'utiliser systématiquement setAttributeNS avec un URI d'espace de noms lorsque vous utilisez createElementNS avec un URI d'espace de noms.

XML a été défini en plusieurs étapes. La première version de la spécification ne disait rien sur les espaces de noms mais laissait suffisamment de syntaxe pour que XML avec des espaces de noms puisse être spécifié au-dessus de XML sans espaces de noms en utilisant des préfixes et des attributs spéciaux xmlns. spécification XML dit:

"Les espaces de noms dans la recommandation XML [Noms XML] attribuent une signification aux noms contenant des caractères deux-points. Par conséquent, les auteurs ne doivent pas utiliser les deux-points dans les noms XML, sauf à des fins d'espace de noms, mais les processeurs XML doivent accepter les deux-points comme caractères de nom."

Les espaces de noms XML permettent aux applications de traitement XML de savoir de quoi il s'agit et permettent de mélanger plusieurs types de XML dans le même document.

Pourquoi ns_string doit être " http://www.w3.org/2000/svg "

Cela inclut l'année de normalisation de la version de SVG, 2000, donc elle contient des informations utiles.

Lorsqu'il est utilisé avec xmlns:svg il indique également au navigateur que svg: le préfixe signifie SVG et non un autre dialecte XML.

48
Mike Samuel