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