95 votes

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 noeud:

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

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

106voto

jasso Points 7802

@skyl pratiquement qui m'ont incité à écrire cette réponse, donc merci de prendre en compte la redondance.

NCName est synonyme de "non-colonisés nom". NCName peut être définie comme un Schéma XML expression régulière [\i-[:]][\c-[:]]*

...et ce n'est que la regex veux dire?

\i et \c sont multi-caractère échappe défini dans la définition de Schéma XML.
http://www.w3.org/TR/xmlschema-2/#dt-ccesN
\i est la fuite de l'ensemble initial de caractères de nom XML et \c est l'ensemble des caractères de nom XML. [\i-[:]] signifie un jeu qui consiste en l'ensemble \i à l'exclusion d'un ensemble qui se composent de la virgule :. Donc, en clair, ça voudrait dire "le premier caractère, mais pas :". L'ensemble de l'expression régulière se lit comme "Une première XML caractère du nom, mais pas les deux-points, suivi par zéro ou plusieurs caractères de nom XML, mais pas les deux-points."

Restrictions pratiques d'un NCName

La pratique des restrictions de NCName sont qu'il ne peut pas contenir plusieurs caractères de symbole comme :, @, $, %, &, /, +, ,, ;, les espaces ou différents entre parenthèses. En outre, un NCName ne peut pas commencer par un nombre, le point ou le signe moins (même si elles peuvent apparaître plus tard dans un NCName.

Où sont NCNames nécessaire

Dans l'espace de noms XML conforme des documents de tous les noms doivent être qualifiée noms ou NCNames. Les valeurs suivantes doivent être NCNames (pas de noms qualifiés):

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

88voto

Andrey Adamovich Points 9404

NCName est un nom non colonisé, par exemple "nom". Comparé à QName qui est un nom qualifié, par exemple "ns: name". 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.

5voto

Skylar Saveland Points 4131

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

Aucun espace ou deux-points. Permet "_" et "-".

Vous utiliserez 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 vote au maximum la personne qui [\i-[:]][\c-[:]]* traduit en anglais pour nous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X