web-dev-qa-db-fra.com

Quelle est la différence entre targetNamespace et xmlns: target?

Quelle est la fonction de targetNamespace?

<schema xmlns="http://www.w3.org/2001/SchemaXML"
        targetNamespace="http://www.example.com/name"
        xmlns:target="http://www.example.com/name">

Je comprends que xmlns="http://www.w3.org/2001/SchemaXML définit l'espace de noms XML du schéma.

Je comprends également que xmlns:target="http://www.example.com/name" définit l'espace de noms pour mon propre vocabulaire si je crée mon propre schéma en utilisant le préfixe "target"; cela agit comme un proxy ou un espace réservé pour l'URI http://www.example.com/name.

Cela semble suffisant pour définir les limites et le vocabulaire nécessaires des participants à l'espace de noms. Alors pourquoi ai-je besoin d'un attribut targetNamespace qui duplique le http://www.example.com/name espace de noms?

39
jojo10

Répond assez bien ici: targetNamespace et xmlns sans préfixe, quelle est la différence?

Pour reformuler:

  • targetNamespace="" - Comme le document XML actuel est un schéma, cet attribut définit l'espace de noms que ce schéma est destiné à cibler ou à valider.

  • xmlns="" - Définit l'espace de noms par défaut dans le document actuel pour tous les éléments non préfixés (c'est-à-dire non yada: dans <yada:elementName>)

  • xmlns:target="" - ici, vous venez de définir votre propre espace de noms avec le préfixe target:, cela n'est pas lié aux deux cas spéciaux précédents.

44
Shaun

Le targetNamespace déclare un espace de noms pour les autres documents xml et xsd pour faire référence à ce schéma. Dans ce cas, le préfixe cible fait référence au même espace de noms et vous l'utiliseriez dans cette définition de schéma pour référencer d'autres éléments, attributs, types, etc. également définis dans cette même définition de schéma.

6
s_t_e_v_e

Le préfixe "cible" dans xmlns:target="http://www.example.com/name" n'a rien de spécial. Comment un processeur de schéma saurait-il que vous vouliez que ce soit l'espace de noms cible pour votre schéma? targetNamespace fait exactement cela - il déclare l'espace de noms auquel appartiennent les composants de votre schéma.

N.B. Tout ce qui se trouve dans le document de schéma ne va pas dans le targetNamespace. Notez les attributs "elementFormDefault" et "attributeFormDefault" sur l'élément "schema" et également l'attribut "form" sur les éléments "element" et "attribute".

2
Kevin