2010-11-08 24 views
31

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

<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 Schema.

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 les vocabulaires nécessaires des participants à l'espace de noms. Alors pourquoi ai-je besoin d'un attribut targetNamespace qui duplique l'espace de noms http://www.example.com/name?

Répondre

1

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

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

6

targetNamespace déclare un espace de noms pour les autres documents xml et xsd pour faire référence à ce schéma. Le préfixe cible dans ce cas 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.

34

Answered très bien ici: targetNamespace and xmlns without prefix, what is the difference?

Refonte:

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

  • xmlns="" - Définit l'espace de noms par défaut dans le document en cours pour tous les éléments non-préfixée (pas de yada: dans <yada:elementName>)

  • xmlns:target="" - ici, vous êtes juste en train de définir votre propre espace de noms avec le préfixe target:, c'est sans rapport avec les deux cas spéciaux précédents.

+1

Cet attribut définit l'espace de noms que ce schéma est destiné à cibler. Je trouve cela très confus. Le schéma "cible" un espace de noms? Donc, si je fais un schéma avec 'targetNamespace =" google.com "' je viens de créer un espace de noms sur Google? Alors quoi? Cela va-t-il gâcher les schémas d'autres personnes qui ont fait de même? De plus, quel préfixe est utilisé? – CodyBugstein

+0

@Image c'est confus, je pense que le document XSL est en train de définir une structure XML, l'espace de nommage est simplement un moyen d'identifier cette structure de façon unique, plus tard quand un document XML le référence (en utilisant xmlns = ou xmlns: somelabel = comme indiqué ci-dessus) il a un nom qui n'est pas en conflit avec d'autres documents XSL que vous pourriez référencer, est-ce logique? – Shaun