2017-01-06 7 views
0

잘못된 공백이 포함 된 XML 인스턴스의 유효성 검사를 거부하는 작동하는 xsd가 있습니다 (자세한 내용은 아래 참조). 캐리지 리턴 (#xD), 줄 바꿈 (#xA) 또는 탭 (# x9) 또는 끝나는 공백 (# x20) 문자 또는 두 개 이상의 인접한 공백 문자 시퀀스).리터럴 대 변형 된 새 줄의 XML 스키마 유효성 검사?

샘플 XSD는 :

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
elementFormDefault="qualified" 
targetNamespace="http://www.example.com" 
xmlns:test="http://www.example.com"> 

<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/> 

<xs:element name="test-token" type="test:Tokenized500Type"></xs:element> 

<xs:simpleType name="Tokenized500Type"> 
    <xs:annotation> 
     <xs:documentation>An element of this type has minimum length of one character, a max of 500, and may not 
      contain any of: the carriage return (#xD), line feed (#xA) nor tab (#x9) characters, shall 
      not begin or end with a space (#x20) character, or a sequence of two or more adjacent space 
      characters.</xs:documentation> 
    </xs:annotation> 
    <xs:restriction base="xs:string"> 
     <xs:maxLength value="500"/> 
     <xs:minLength value="1"/> 
     <xs:pattern value="\S+(\S+)*"/> 

    </xs:restriction> 
</xs:simpleType> 

나는 위와 같이 문자 공백 문자로이 테스트.

XML 인스턴스에 관련 요소 콘텐츠에 이스케이프 처리 된 공백이 있으면 어떻게됩니까? 이로 인해 유효성 검사 오류가 발생하거나되지 않습니까?

<?xml version="1.0" encoding="UTF-8"?> 
<test-token xmlns="http://www.example.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com">&#13;</test-token> 

도 참조 : XS의

+2

XSD 및 샘플 XML을 제공하고 어떤 오류가 발생했는지/예상 할 수 있습니까? – Sprotty

+0

감사합니다. 추가했습니다. 은 리터럴 nl처럼이 스키마의 인스턴스를 무효화하는 것처럼 보이기 때문에 원하는 경우가 아니면 내 질문에 대답합니다. – Michael

답변

1

정규식은 확장 된 (이스케이프되지 않은) 문자열에서 작동해야하므로 새 라인 리터럴과 & # 13 사이에 구별이 없어야합니다.

\S matches anything but a whitespace (short for [^\f\n\r\t\v\u00A0\u2028\u2029]). 

또한 XSD에 사용되는 정규식의가 더 많은 표준 POSIX 정규식의 다를 유니 코드 정규식 (, 그리고 파서의 일부 (XSD 유효성 검사를 주위에 노크에 의해 발생하는 어떤 정규 표현식 파서 사용 문제를 더 악화 할 수 있습니다 .NET에서 내부 정규식 파서 사용 - '유니 코드 정규 표현식')하지

참고 :. · 정규 표현식 · 일반적인 솔루션을 제공하기 위해 을 시도하지 않습니다 여기에 정의 된 언어 "정규 표현식"이상 UCS 문자 시퀀스 특히, 쉽게 제공하지 않습니다 은 기본 문자와 결합 기호의 일치하는 순서입니다. 언어는 [유니 코드 정규 표현식 지침]에 정의 된 "수준 1"기능 지원 대상입니다. 이 사양의 향후 버전이 "레벨 2" 기능을 지원할 것으로 기대됩니다.

+0

유용한 구현 힌트에 대해 @Sprotty! – Michael