Я запустил один из своих 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