xs : NCName 유형은 무엇이며 언제 사용해야합니까?


97

스키마 생성기를 통해 내 xml 파일 중 하나를 실행했는데 생성 된 모든 것이 하나의 노드를 제외하고 예상했던 것입니다.

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

정확히 무엇입니까 xs:NCName? 그리고 왜 그것을 사용 xs:string하겠습니까?

답변:


92

NCName콜론 화 되지 않은 이름입니다 (예 : "name"). 정규화 된 이름 인 QName (예 : "ns : name")과 비교됩니다. 이름이 다른 네임 스페이스로 한정되지 않아야하는 경우 NCName입니다.

xs : string은 이름에 전혀 제한을 두지 않지만 xs : NCName은 기본적으로 ":"이 문자열에 표시되는 것을 허용하지 않습니다.


1
빈 문자열도에 허용되지 않습니다xs:NCName
WeizhongTu

108

@skyl은 실제로이 답변을 작성하도록 유도 했으므로 중복을 염두에 두십시오.

NCName"콜론 화되지 않은 이름"을 의미합니다. NCName은 XML 스키마 정규식으로 정의 할 수 있습니다.[\i-[:]][\c-[:]]*

... 그리고 그 정규식은 무엇을 의미합니까?

\i\cXML 스키마 정의에 정의 된 멀티 문자 탈출이다.
http://www.w3.org/TR/xmlschema-2/#dt-ccesN
\i 은 초기 XML 이름 문자 집합에 대한 이스케이프 \c이며 XML 이름 문자 집합입니다. 콜론 문자로 구성된 [\i-[:]]집합을 \i제외한 집합으로 구성된 집합을 의미합니다 :. 따라서 일반 영어에서는 "모든 초기 문자가 아니라 :"를 의미합니다. 전체 정규식은 "1 개의 초기 XML 이름 문자 (콜론이 아님), 뒤에 0 개 이상의 XML 이름 문자가 나오지만 콜론은 아님"으로 읽습니다.

NCName의 실제 제한

의 NCName의 실제적인 제한이 같은 여러 가지 기호 문자를 포함 할 수있다 :, @, $, %, &, /, +, ,, ;, 공백 문자 또는 다른 괄호. 또한 NCName은 나중에 NCName에 나타날 수 있지만 숫자, 점 또는 마이너스 문자로 시작할 수 없습니다.

NCNames가 필요한 곳

네임 스페이스 준수 XML 문서에서 모든 이름은 정규화 된 이름이거나 NCName이어야합니다. 다음 값은 NCNames (정규화 된 이름 아님) 여야합니다.

  • 네임 스페이스 접두사
  • ID를 나타내는 값
  • IDREF를 나타내는 값
  • 표기법을 나타내는 값
  • 처리 명령 대상
  • 엔티티 이름

3
'더 나아가 NCName은 숫자로 시작할 수 없습니다'라는 줄은 숫자가 'xs : ID'가 될 수 없다는 것을 이해하는 데 도움이되었습니다
Sean Murphy

이 표현식을 Java 또는 JS와 같은 프로그래밍 언어로 어떻게 변환 할 수 있습니까?
calbertts


정규 CName인지 여부는 정규식 "[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ _] [\\ w \\. \\-\\ d] *"로 확인할 수 있습니다. 그것의 의미는. 값은 문자 또는 밑줄로 시작해야하며 단어, 점, 대시, 밑줄, 숫자를 포함해야합니다. 당신은 그것을 시도 할 수 있습니다 : regexr.com
Naxos84

위에 주어진 정규식은 라틴 문자 만 처리합니다. 당신은 사양에 따라 NCNames에서 전체 검사를 원하는 경우 w3.org/TR/1999/REC-xml-names-19990114/#NT-NCName 이 클래스를 사용해야합니다 java2s.com/Code/Java/XML/...를
Naxos84

29

실제로 말하자면 ...

허용되는 문자 : - , ., 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

또한, -.의 값의 첫 번째 문자로 사용될 수 없다.

허용되지 않는 문자 : , !, ", #, $, %, &, ', (, ), *, +, ,, /, :, ;, <, =, >, ?, @, [, \, ], ^, `, {, |, },~


2
예를 들어 é 또는 ø와 같이 허용되는 문자가 많이 누락 된 것 같습니다.
Eric Bloch

이러한 비 ASCII 경우를 커버하기 위해, \ P {L} + 문자 세트의 일부로서 포함한다
Kenston 최

11
숫자는 첫 번째 문자로도 사용할 수 없습니다.
Thilo

5

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

공백이나 콜론이 없습니다. "_"및 "-"를 허용합니다.

값이 허용되는 값으로 제한되는지 확인할 수 있도록 문자열 대신 이것을 사용합니다. 예를 들어 django의 "slug"개념과 같은 이름 / 식별자에 대한 특정 규칙에 잘 매핑됩니다.

나는 [\i-[:]][\c-[:]]*우리를 위해 영어 로 번역 하는 사람을 찬성합니다 .


11
[\i-[:]][\c-[:]]*영어로 번역되는 답변을 추가했습니다 . 약속 한대로
계속해서 찬성 투표하십시오
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.