Что такое тип xs: NCName и когда он должен использоваться?

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

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

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

Ответ 1

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

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

Ответ 2

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

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

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

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

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

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

Где нужны NCNames

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

  • префиксы пространства имен
  • значения, представляющие идентификатор
  • значения, представляющие IDREF
  • значения, обозначающие NOTATION
  • Цели обработки
  • имена сущностей

Ответ 3

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

Разрешенные символы: -, ., 0, 1, 2, 3, 4, 5, 6, 8, 8, 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

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

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

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

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