Ce n'elementFormDefault faire dans XSD?
Ce n' elementFormDefault
faire, et quand doit-il être utilisé?
J'ai donc trouvé quelques définitions pour elementFormDefault
valeurs:
qualifié - éléments et attributs
sont dans le targetNamespace de l'
schémanon qualifiés - éléments et
les attributs ne sont pas un espace de noms
Donc, à partir de cette définition, je pense que si un schéma est définie à qualifiées, c'est pourquoi vous devez préfixer le type avec l'espace de noms? Et quels sont les scénarios qui vous aurait même un ensemble non-qualifiées pour cette question? J'ai essayé de Googler, mais tout ce que j'ai été un couple W3C pages qui ont été extrêmement difficiles à comprendre.
C'est le fichier que je suis en train de travailler avec droite maintenant, pourquoi ai-je besoin de déclarer le type de target:TypeAssignments
lorsque je déclare la targetNamespace
comme le même que xmlns:target
?
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:target="http://www.levijackson.net/web340/ns"
targetNamespace="http://www.levijackson.net/web340/ns"
elementFormDefault="qualified">
<element name="assignments">
<complexType>
<sequence>
<element name="assignments" type="target:TypeAssignments"
minOccurs="1" maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
<complexType name="TypeAssignments">
<sequence>
<element name="assignment" type="target:assignmentInfo"
minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="assignmentInfo">
<sequence>
<element name="name" type="string"/>
<element name="page" type="target:TypePage"/>
<element name="file" type="target:TypeFile"
minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<attribute name="id" type="string" use="required"/>
</complexType>
<simpleType name="TypePage">
<restriction base="integer">
<minInclusive value="50" />
<maxInclusive value="498" />
</restriction>
</simpleType>
<simpleType name="TypeFile">
<restriction base="string">
<enumeration value=".xml" />
<enumeration value=".dtd" />
<enumeration value=".xsd" />
</restriction>
</simpleType>
</schema>
- Jetez un oeil à xfront.com/HideVersusExpose.html. Ici aussi montrer les Meilleures Pratiques avec elementFormDefault.
Vous devez vous connecter pour publier un commentaire.
ElementFormDefault n'a rien à voir avec l'espace de noms des types dans le schéma, c'est sur les espaces de noms des éléments dans des documents XML qui sont conformes avec le schéma.
Voici la corporation de la section de la spécification:
Ce que cela signifie, c'est que le targetNamespace vous avez déclaré au haut du schéma ne s'applique qu'à des éléments dans le schéma de document XML conforme si elementFormDefault est "qualifié" ou l'élément est déclaré explicitement dans le schéma comme ayant form="qualifiés".
Par exemple: Si elementFormDefault non qualifié est -
mettra attendre "nom" éléments pour être dans le targetNamespace et "page" des éléments dans l'espace de noms null.
Pour vous épargner d'avoir à mettre en forme="qualifiée" sur chaque élément de la déclaration, en indiquant elementFormDefault="qualified" signifie que le targetNamespace s'applique à chaque élément, à moins que remplacée par la mise form="non qualifiés" sur la déclaration de l'élément.
De considérer les éléments suivants ComplexType
AuthorType
utilisé parauthor
élémentSi
elementFormDefault="unqualified"
puis la suite de l'Instance XML est valide
les auteurs de l'attribut de nom est autorisé sans spécifier l'espace de noms(non qualifié). Tous les éléments qui font partie de
<xsd:complexType>
sont considérés comme des locaux à complexType.si
elementFormDefault="qualified"
puis l'instance doit avoir les éléments locaux qualifiés
veuillez vous référer cette lien pour plus de détails
Nouvelle, réponse détaillée et une explication à une vieille question fréquemment posée...
Réponse courte: Si vous n'ajoutez pas de
elementFormDefault="qualified"
àxsd:schema
, alors la valeur par défautunqualified
valeur signifie que, localement, a déclaré éléments sont en aucun espace de noms.Il y a beaucoup de confusion quant à ce que
elementFormDefault
n', mais cela peut être rapidement clarifiée par un court exemple...Version simplifiée de votre XSD:
Points clés:
assignment
élément est défini localement.elementFormDefault
estunqualified
.elementFormDefault="qualified"
de sorte que
assignment
est dans l'espace de noms cible, comme on le feraits'attendre.
Apparemment XML Valide
Ce XML semble que ça devrait être valide en vertu de la ci-dessus XSD:
Avis:
assignments
lieuxassignments
et tous ses descendants dans l'espace de noms par défaut (http://www.levijackson.net/web340/ns
).Embarrassant De L'Erreur De Validation
Malgré une apparence valide, le ci-dessus XML obtient ainsi la confusion erreur de validation:
Notes:
assignment
élément, mais il en a trouvé uneassignment
élément. (WTF){
et}
autour deassignment
signifie que la validation attendaisassignment
dans aucun espace de noms ici. Malheureusement, quand il dit qu'il a trouvé unassignment
élément, il ne mentionne pas qu'il l'a trouvé dans un espace de noms par défaut qui diffère d'aucun espace de noms.Solution
elementFormDefault="qualified"
à laxsd:schema
élément XSD. Cela signifie XML valide doit placer des éléments dans l'espace de noms cible quand déclarés localement dans le XSD; sinon, XML valide doit placer localement éléments déclarés dans aucun espace de noms.l'exigence que
assignment
être dans aucun espace de noms. Ceci peut être réalisé,par exemple, en ajoutant
xmlns=""
à laassignment
élément.elementFormDefault
Important de noter avec elementFormDefault est qu'il s'applique à localement éléments définis, généralement nommé éléments à l'intérieur d'un complexType bloc, par opposition aux éléments globaux définis dans le premier niveau du schéma. Avec elementFormDefault="qualified" vous pouvez vous adresser à des éléments locaux dans le schéma à partir de l'intérieur du document xml à l'aide du schéma de l'espace de noms cible que le document de l'espace de noms par défaut.
Dans la pratique, l'utilisation elementFormDefault="qualified" pour être en mesure de déclarer les éléments dans les blocs imbriqués, sinon vous devrez déclarer tous les éléments sur le niveau supérieur et à vous y référer dans le schéma dans les éléments imbriqués à l'aide de l'attribut ref, ce qui a beaucoup moins compact schéma.
Ce bit dans le Schéma XML de l'Apprêt en parle: http://www.w3.org/TR/xmlschema-0/#NS
elementFormDefault="qualified" est utilisé pour contrôler l'utilisation des espaces de nommage dans XML les documents d'instance (.fichier xml), plutôt que des espaces de noms dans le schéma document lui-même.fichier xsd).
En spécifiant elementFormDefault="qualified" nous appliquer la déclaration d'espace de noms pour être utilisées dans des documents validés avec ce schéma.
Il est de pratique courante pour spécifier cette valeur à déclarer que les éléments doivent être qualifiés plutôt que non. Cependant, depuis attributeFormDefault="sans réserve" est la valeur par défaut, il n'a pas besoin d'être spécifié dans le document de schéma, si l'on ne veut pas qualifier les espaces de noms.
J'ai remarqué que XMLSpy(au moins la version 2011)a besoin d'un targetNameSpace défini si elementFormDefault="qualified" est utilisé. Sinon, ne validez pas. Et aussi de ne pas générer xmls avec des préfixes d'espace de noms