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

J’ai exécuté un de mes fichiers xml via un générateur de schéma et tout ce qui était généré correspondait à ce qui était attendu, à l’exception d’un nœud:

 

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

NCName est un nom non-colonisé, par exemple “nom”. Par rapport à 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, ils sont alors NCNames.

xs: ssortingng n’impose aucune ressortingction sur vos noms, mais xs: NCName n’autorise pas “:” à apparaître dans la chaîne.

@skyl m’a pratiquement incité à écrire cette réponse, alors 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 regex?

\i et \c sont des échappements multi-caractères définis dans la définition de 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 constitué 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 nom de nom XML initial, mais pas de deux points, suivi de zéro ou plusieurs caractères de nom XML, mais pas de deux points”.

Ressortingctions pratiques d’un NCName

Les ressortingctions pratiques de NCName sont qu’il ne peut pas contenir plusieurs caractères de symboles comme:, @ , $ , % , & , / , + ,,, ; , des espaces ou des parenthèses différentes. De plus, un NCName ne peut pas commencer par un nombre, un point ou un caractère moins, bien qu’ils puissent apparaître plus tard dans un NCName.

Où sont les noms NCN

Dans les documents XML conformes aux espaces de noms, tous les noms doivent être des noms qualifiés ou des noms NCN. 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é

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 , n , o , p , q , r , s , t , u , v , w , x , y , z

Aussi, - et . ne peut pas être utilisé 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 points. Permet “_” et “-“.

Vous utiliseriez ceci à la place de chaîne pour que vous puissiez valider que la valeur est limitée à ce qui est autorisé. Il correspond bien à certaines conventions de nom / identifiant comme le concept de “slug” de django, par exemple.

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