Я запустил один из моих 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-[:]]*
переводит на английский язык для нас.