Я запустил один из моих xml файлов через генератор схемы, и все, что было создано, было ожидаемым, за исключением одного node:
<xs:element name="office" type="xs:NCName"/>
Что такое xs:NCName? И зачем использовать его, скорее xs:string?
Я запустил один из моих xml файлов через генератор схемы, и все, что было создано, было ожидаемым, за исключением одного node:
<xs:element name="office" type="xs:NCName"/>
Что такое xs:NCName? И зачем использовать его, скорее xs:string?
NCName - это неколонированное имя, например. "имя". По сравнению с QName, которое является квалифицированным именем, например. "Нс: имя". Если ваши имена не должны соответствовать другим пространствам имен, то это NCNames.
xs: string вообще не содержит ограничений на ваши имена, но xs: NCName в основном запрещает ":" появляться в строке.
@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.
В согласованных XML-документах пространства имен имена должны быть либо квалифицированными именами, либо NCNames. Следующие значения должны быть NCNames (не квалифицированные имена):
Практически говоря...
Разрешенные символы: -, ., 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
Кроме того, - и . не могут использоваться в качестве первого символа значения.
Запрещенные символы: , !, ", #, $, %, &, ', (, ), *, +, ,, /, :, ;, <, =, >, ?, @, [, \, ], ^, `, {, |, }, ~
http://books.xmlschemata.org/relaxng/ch19-77215.html
Нет пробелов или двоеточий. Позволяет "_" и "-".
Вы использовали бы это вместо строки, чтобы вы могли проверить, что значение ограничено допустимым. Он хорошо отображает определенные соглашения для имени/идентификатора, например, концепции django "slug".
Я продвигаю человека, который [\i-[:]][\c-[:]]* переводит на английский язык для нас.