Question

J'ai exécuté l'un de mes fichiers xml via un générateur de schéma et tout ce qui était généré correspondait aux attentes, à l'exception d'un noeud:

<xs:element name="office" type="xs:NCName"/>

Qu'est-ce que c'est exactement xs:NCName? Et pourquoi l’utiliserait-il plutôt xs:string?

Était-ce utile?

La solution

NCName est un nom non colonisé, par exemple. " name " ;. Comparé à QName, qui est un nom qualifié, par exemple. " ns: name " ;. Si vos noms ne sont pas censés être qualifiés par différents espaces de noms, il s’agit alors de noms NCNames.

xs: string n'impose aucune restriction sur vos noms, mais xs: NCName interdit fondamentalement & ";:: &"; apparaître dans la chaîne.

Autres conseils

@skyl m'a pratiquement incité à écrire cette réponse, alors faites attention à la redondance.

NCName signifie & "Nom non colonisé &". NCName peut être défini comme une expression régulière de schéma XML [\i-[:]][\c-[:]]*

... et que signifie cette expression rationnelle?

\i et \c sont des échappements à plusieurs caractères définis dans la définition du schéma XML.
http://www.w3.org/TR/xmlschema-2/#dt-ccesN
[\i-[:]] est l'échappement du jeu de caractères de nom XML initial et : est le jeu de caractères de nom XML. @ désigne un ensemble constitué de l'ensemble $ à l'exclusion d'un ensemble composé du caractère deux-points %. Donc, en clair, cela signifierait & "N'importe quel caractère initial, mais pas & &"; L’expression régulière entière se lit comme suit: & Quot; Un caractère de nom XML initial, mais pas deux points, suivi de zéro ou plusieurs caractères de nom XML, mais pas deux points. & Quot;

Restrictions pratiques relatives à un nom NCName

Les restrictions pratiques de NCName sont qu’il ne peut pas contenir plusieurs caractères de symbole tels que /, +, ,, ;, <=>, <=>, <=>, <=>, <=>, < =>, caractères blancs ou parenthèses différentes. De plus, un nom NCName ne peut pas commencer par un chiffre, un point ou un caractère négatif même s’ils peuvent apparaître plus tard dans un nom NCName.

Où les noms NCNames sont-ils nécessaires

Dans les documents XML conformes aux espaces de noms, tous les noms doivent être des noms qualifiés ou des noms NCNames. Les valeurs suivantes doivent être NCNames (non des noms qualifiés):

  • préfixes d'espace de nom
  • valeurs représentant un identifiant
  • valeurs représentant un IDREF
  • valeurs représentant une NOTATION
  • cibles d'instruction de traitement
  • noms d'entités

Concrètement ...

Caractères autorisés: -, ., 0, 1, 2, 3, 4, 5, 6, 7, < =>, 8, 9, A, B, C, D, E, F, G, H, I, J, K , L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, < =>, Z, _, a, b, c, d, e, f, g, h, i, j, k , l, m, n, o, p, q, r, s, t, u, v, w, x, y, < =>, z, , !, ", #

De même, $ et % ne peuvent pas être utilisés comme premier caractère de la valeur.

Caractères non autorisés: &, ', (, ), *, +, ,, /, :, ;, < =>, <, =, >, ?, @, [, \, ], ^, `, {, |, } , ~, <=>, <=>, <=>, <=>, <=>, <=>, <=>

http://books.xmlschemata.org/relaxng/ch19-77215.html

Pas d'espaces ni de deux points. Permet & Quot; _ & Quot; et " - ".

Vous utiliseriez ceci au lieu de chaîne pour pouvoir valider que la valeur est limitée à ce qui est autorisé. Cela correspond bien à certaines conventions de nom / identifiant, comme le concept de django de & "; Slug &" ;, par exemple.

Je upvote la personne qui [\i-[:]][\c-[:]]* traduit en anglais pour nous.

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