web-dev-qa-db-fra.com

Qu'est-ce qu'un type xs: NCName et quand doit-il être utilisé?

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 nœud:

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

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

92
user189320

NCName est un nom non colonisé, par exemple. "prénom". Comparé à QName qui est un nom qualifié, par exemple. "ns: nom". Si vos noms ne sont pas supposé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 essentiellement à ":" d'apparaître dans la chaîne.

87
Andrey Adamovich

@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 de l’ensemble des caractères de nom XML initiaux et \c est l'ensemble des caractères de nom XML. [\i-[:]] désigne un ensemble constitué de l'ensemble \i excluant un ensemble composé du caractère deux-points :. Donc, en clair, cela signifierait "tout caractère initial, mais pas : ". L’expression régulière entière se lit comme suit:" 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. "

Restrictions pratiques d'un 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, bien qu'ils puissent apparaître plus tard dans un nom NCName.

Où sont les NCNames 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 (noms non qualifiés):

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

Pratiquement parlant...

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

Également, - et . ne peut pas être utilisé comme premier caractère de la valeur.

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

28
izilotti

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

Aucun espace ou deux-points. Permet "_" 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 "slug" de Django, par exemple.

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

4
Skylar Saveland