Що таке тип xs: NCName і коли його слід використовувати?


97

Я запустив один із своїх XML-файлів через генератор схем, і все, що генерується, було те, що очікувалося, за винятком одного вузла:

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

Що саме таке xs:NCName? І навіщо це скоріше використовувати xs:string?

Відповіді:


92

NCName - неколонізована назва, наприклад, "ім'я". Порівняно з QName, яке має кваліфіковане ім'я, наприклад, "ns: name". Якщо ваші імена не мають бути кваліфіковані за різними просторами імен, то це NCNames.

xs: string взагалі не обмежує ваші імена, але xs: NCName в основному забороняє ":" відображатись у рядку.


1
порожня рядок також заборонена вxs:NCName
WeizhongTu

108

@skyl практично змусив мене написати цю відповідь, тому, будь ласка, зауважте надмірність.

NCNameозначає "неколонізована назва". NCName може бути визначений як регулярний вираз XML-схеми[\i-[:]][\c-[:]]*

... а що означає цей регекс?

\iі \cє багатосимвольними втечами, визначеними у визначенні XML Schema.
http://www.w3.org/TR/xmlschema-2/#dt-ccesN
\i - це вихід для набору початкових символів імені XML і \cє набором символів імені XML. [\i-[:]]означає набір, що складається з множини, \iвиключаючи набір, що складається з символу двокрапки :. Так в звичайній англійській мові це означало б "будь-який початковий символ, але ні :". Весь регулярний вираз звучить як "Один початковий символ імені XML, але не двокрапка, за якою слідують нульові або більше символів імені XML, але не двокрапка".

Практичні обмеження NCName

Практичні обмеження NCName в тому , що він не може містити кілька символів символів , як :, @, $, %, &, /, +, ,, ;, пробільні символи або різні дужка. Крім того, NCName не може починатися з числа, крапки або мінуса, хоча вони можуть з’являтися пізніше в NCName.

Де потрібні NCNames

У XML-документах, що відповідають простору імен, усі імена повинні бути або кваліфікованими іменами, або NCNames. Наступні значення повинні бути іменами NCN (не кваліфікованими іменами):

  • Префікси простору імен
  • значення, що представляють ідентифікатор
  • значення, що представляють IDREF
  • значення, що представляють УВАГУ
  • обробка цілей інструкцій
  • назви юридичних осіб

3
Рядок "Крім того, що ім'я NCN не може починатися з числа", допоміг мені зрозуміти, що число не може бути "xs: ID"
Шон Мерфі

Як я можу перетворити це вираз у мову програмування, як Java чи JS?
calbertts


Ви можете перевірити, чи це звичайний CName з регулярним виразом: "[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ _] [\\ w \\. \\ - \\ d] *". Це означає. значення повинно починатися з літери або підкреслення, а потім містити слова, крапки, тире, підкреслення, цифри. Спробувати його можна за адресою: regexr.com
Naxos84

Мій регекс, наведений вище, обробляє лише латинські літери. Якщо ви хочете провести повну перевірку NCNames відповідно до специфікації w3.org/TR/1999/REC-xml-names-19990114/#NT-NCName, ви повинні використовувати цей клас: java2s.com/Code/Java/XML/…
Naxos84

29

Практично кажучи ...

Символи: - , ., 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

Крім того , -і .не може бути використаний в якості першого символу значення.

Заборонені символи: , !, ", #, $, %, &, ', (, ), *, +, ,, /, :, ;, <, =, >, ?, @, [, \, ], ^, `, {, |, },~


2
Я думаю, що цього не вистачає безлічі дозволених символів, наприклад, é або ø.
Ерік Блох

Для висвітлення тих випадків, що не стосуються
асоцій

11
Цифри також не можна використовувати як перший символ.
Тило

5

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

Ні пробілів, ні колонок. Дозволяє "_" та "-".

Ви б використовували це замість рядка, щоб можна було перевірити, що значення обмежене дозволеним. Це добре відображає певні умови для імені / ідентифікатора, як, наприклад, концепція django "slug".

Я схвалюю людину, яка [\i-[:]][\c-[:]]*перекладає на нас англійською.


11
Я додав відповідь, що перекладається [\i-[:]][\c-[:]]*англійською. Ідіть вперед і підкажіть, як ви і обіцяли;)
jasso
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.