Frage

Ich habe eine meiner XML -Dateien über einen Schemagenerator durchgeführt und alles, was generiert wurde, wurde mit Ausnahme eines Knotens erwartet:

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

Was genau ist xs:NCName? Und warum sollte man es eher benutzen? xs:string?

War es hilfreich?

Lösung

Ncname ist nicht-kolonisierter Name zB "Name". Im Vergleich zu QNAME, der qualifizierter Name ist, z. "NS: Name". Wenn Ihre Namen nicht durch verschiedene Namespaces qualifiziert werden sollen, sind es NCNAMEs.

XS: String legt überhaupt keine Einschränkungen für Ihre Namen ab, aber XS: NCNAME verweist grundsätzlich ":" In der Zeichenfolge erscheinen.

Andere Tipps

@Skyl hat mich praktisch dazu provoziert, diese Antwort zu schreiben, also bitte dagegen die Redundanz.

NCName steht für "nicht kolonisierten Namen". NCNAME kann als regelmäßiger Ausdruck eines XML -Schemas definiert werden [\i-[:]][\c-[:]]*

... und was bedeutet das Regex?

\i und \c werden in der XML-Schema-Definition definiert.
http://www.w3.org/tr/xmlschema-2/#dt-ccesn
\i ist die Flucht für die anfänglichen XML -Namenszeichen und für die ersten XML -Namenszeichen und \c ist der Satz von XML -Namenszeichen. [\i-[:]] bedeutet einen Satz, der aus dem Satz besteht \i ohne einen Satz, der aus dem Dickdarmcharakter besteht :. Also im einfachen Englisch würde es "einen anfänglichen Charakter bedeuten, aber nicht :"Der gesamte reguläre Ausdruck lautet als" ein anfänglicher XML -Name -Zeichen, aber nicht als Dickdarm, gefolgt von Null oder mehr XML -Namenszeichen, aber nicht einem Dickdarm ".

Praktische Einschränkungen eines NCNAME

Die praktischen Einschränkungen des NCNAME sind, dass es nicht mehrere Symbolzeichen wie nicht enthalten können :, @, $, %, &, /, +, ,, ;, Whitespace -Zeichen oder verschiedene Klammern. Darüber hinaus 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 konformante XML -Dokumente müssen alle Namen entweder qualifizierte Namen oder NCNames sein. Die folgenden Werte müssen NCNAME (nicht qualifizierte Namen) sein:

  • Namespace Präfixe
  • Werte, die eine ID darstellen
  • Werte, die eine IDREF darstellen
  • Werte, die eine Notation darstellen
  • Verarbeitungsanweisungsziele
  • Entitätsnamen

Praktisch gesprochen...

Erlaubte Charaktere: -, ., 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

Ebenfalls, - und . kann nicht als erster Zeichen des Wertes verwendet werden.

Nicht zugelassene Zeichen: , !, ", #, $, %, &, ', (, ), *, +, ,, /, :, ;, <, =, >, ?, @, [, \, ], ^, `, {, |, }, ~

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

Keine Räume oder Kolons. Erlaubt "_" und "-".

Sie würden dies anstelle von String verwenden, damit Sie bestätigen können, dass der Wert auf das beschränkt ist, was erlaubt ist. Es ist gut auf bestimmte Konventionen für Namen/Bezeichner wie Djangos Konzept von "Slug" zugeordnet.

Ich stimmte die Person, die [\i-[:]][\c-[:]]* übersetzt ins Englische für uns.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top