Что такое тип xs: NCName и когда его следует использовать? - PullRequest
92 голосов
/ 27 октября 2009

Я запустил один из моих xml-файлов через генератор схемы, и все, что было сгенерировано, было ожидаемым, за исключением одного узла:

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

Что именно является xs:NCName? И зачем его использовать, скорее xs:string?

Ответы [ 4 ]

104 голосов
/ 28 мая 2011

@ skyl практически спровоцировал меня написать этот ответ, так что, пожалуйста, учтите избыточность.

NCName означает «не колонизированное имя». NCName может быть определено как регулярное выражение схемы XML [\i-[:]][\c-[:]]*

... а что означает это регулярное выражение?

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

Практические ограничения NCName

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

Где нужны NCNames

В XML-документах, соответствующих пространству имен, все имена должны быть либо квалифицированными, либо NCNames. Следующие значения должны быть NCNames (не квалифицированные имена):

  • префиксы пространства имен
  • значения, представляющие ID
  • значения, представляющие IDREF
  • значения, представляющие ОБОЗНАЧЕНИЕ
  • целевые инструкции обработки
  • имена сущностей
86 голосов
/ 27 октября 2009

NCName - неколонизированное имя, например "название". По сравнению с QName, которое является квалифицированным именем, например «Нс: имя». Если ваши имена не должны быть квалифицированы в разных пространствах имен, то это NCNames.

xs: string вообще не накладывает никаких ограничений на ваши имена, но xs: NCName, по сути, запрещает ":" появляться в строке.

28 голосов
/ 06 июня 2013

Практически говоря ...

Допустимые символы: -, ., 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

Кроме того, - и . нельзя использовать в качестве первого символа значения.

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

4 голосов
/ 26 мая 2011

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

Без пробелов и двоеточий. Позволяет "_" и "-".

Вы можете использовать это вместо строки, чтобы можно было проверить, что значение ограничено допустимым значением. Он хорошо соотносится с определенными соглашениями для имени / идентификатора, например, в концепции django «slug».

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

...