Ich habe eine meiner XML-Dateien über einen Schemagenerator ausgeführt und alles, was generiert wurde, war das, was erwartet wurde, mit Ausnahme eines Knotens:
<xs:element name="office" type="xs:NCName"/>
Was genau ist xs:NCName
? Und warum sollte man es lieber benutzen xs:string
?
xml
xsd
xml-namespaces
jasso
quelle
quelle
xs:NCName
@skyl hat mich praktisch dazu gebracht, diese Antwort zu schreiben. Bitte beachten Sie die Redundanz.
NCName
steht für "nicht kolonisierter Name". NCName kann als regulärer Ausdruck eines XML-Schemas definiert werden[\i-[:]][\c-[:]]*
... und was bedeutet dieser Regex?
\i
und\c
sind Escapezeichen mit mehreren Zeichen, die in der XML-Schemadefinition definiert sind.http://www.w3.org/TR/xmlschema-2/#dt-ccesN
\i
ist das Escape für den Satz von anfänglichen XML-Namenszeichen und\c
ist der Satz von XML-Namenszeichen.[\i-[:]]
bedeutet eine Menge, die aus der Menge besteht, mit\i
Ausnahme einer Menge, die aus dem Doppelpunkt besteht:
. Im Klartext würde es also "jedes Anfangszeichen, aber nicht:
" bedeuten . Der gesamte reguläre Ausdruck lautet "Ein anfängliches XML-Namenszeichen, aber kein Doppelpunkt, gefolgt von null oder mehr XML-Namenszeichen, aber kein Doppelpunkt."Praktische Einschränkungen eines NCNames
Die praktischen Einschränkungen von NCName sind , dass es nicht mehrere Symbolzeichen wie enthalten kann
:
,@
,$
,%
,&
,/
,+
,,
,;
, Leerzeichen oder andere Klammer. Außerdem kann ein NCName nicht mit einer Zahl, einem Punkt oder einem Minuszeichen beginnen, obwohl sie später in einem NCName erscheinen können.Wo werden NCNames benötigt?
In Namespace-konformen XML-Dokumenten müssen alle Namen entweder qualifizierte Namen oder NCNames sein. Die folgenden Werte müssen NCNames sein (keine qualifizierten Namen):
quelle
Praktisch gesprochen...
Erlaubte Zeichen:
-
,.
,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
Auch
-
und.
kann nicht als erstes Zeichen des Werts verwendet werden.Nicht zulässige Zeichen:
,
!
,"
,#
,$
,%
,&
,'
,(
,)
,*
,+
,,
,/
,:
,;
,<
,=
,>
,?
,@
,[
,\
,]
,^
,`
,{
,|
,}
,~
quelle
http://books.xmlschemata.org/relaxng/ch19-77215.html
Keine Leerzeichen oder Doppelpunkte. Ermöglicht "_" und "-".
Sie würden dies anstelle einer Zeichenfolge verwenden, damit Sie überprüfen können, ob der Wert auf das zulässige Maß beschränkt ist. Es passt gut zu bestimmten Konventionen für Namen / Bezeichner, wie zum Beispiel Djangos Konzept der "Schnecke".
Ich stimme der Person zu, die
[\i-[:]][\c-[:]]*
für uns ins Englische übersetzt.quelle
[\i-[:]][\c-[:]]*
ins Englische übersetzt wird. Gehen Sie voran und stimmen Sie ab, wie Sie versprochen haben;)