2009-03-20 5 views
4

나는 다음에 XmlSchema 사용 : 그것은 적어도 하나 개의 문자 길이이어야합니다 requiredStringType을 정의XmlSchema 공백 축소 : 여러 공백은 어떻게됩니까?

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

    <xs:element name="test"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="testElement" type="m:requiredStringType"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

    <xs:simpleType name="requiredStringType"> 
    <xs:restriction base="xs:string"> 
     <xs:minLength value="1"/> 
     <xs:whiteSpace value="collapse"/> 
    </xs:restriction> 
    </xs:simpleType> 
</xs:schema> 

을 또한 공백 붕괴를 정의합니다.

나는 다음과 같은 XML 문서를 검증 succeedes의 유효성을 검사 할 때 :

<?xml version="1.0" encoding="UTF-8"?> 
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.text.com/XmlValidation"> 
    <testElement>  </testElement> 
</test> 

w3.org이 공백 붕괴에 대한 정의에 의해 암시 처리가 교체 한 후

", # X20 년대의 연속 시퀀스로 붕괴됩니다 하나의 # x20 및 앞뒤의 # x20이 제거됩니다. "

이렇게하면 3 개의 공백이 하나의 공백으로 축소되거나 0 개의 공백으로 축소됩니까? XmlSpy에서 유효성 검사가 실패합니다. .NET에서는 성공합니다.

답변

4

앞뒤 공백 문자가 제거되었으므로 공백 만 포함 된 문자열은 빈 문자열로 축소됩니다. XmlSpy는 유효성 검사에서 정확하고 .NET은 관대합니다 (또는 오류를 만들고 있습니다).

White Space Normalization during Validation에 따르면 XML Schema Part 1: Structures Second Edition입니다.

없음 정상화가 수행되지 않습니다
을 보존, 값이 · 정상화 값 ·은 (
# 개 X9 (탭), #xA (라인 피드)와 #xD의
모든 항목을 바꿉니다이다 캐리지 리턴)은 # x20 (공백)으로 바뀝니다.
하에서 상기 지정된 대체 이후
교체 붕괴 #의 연속 서열 x20s 단일 #의 X20으로 축소하고, 초기 및/또는 최종의 # x20s 삭제된다.

따라서, 우선 공백 공백 문자로 대체되어, 초 연속 서열은 세 번째와 마지막 초기 단일 공백 ​​문자로 대체되어, 최종 블랭크는 삭제된다. 이 순서에 따라 공백 만 포함하는 문자열을 유효성 검사 중에 빈 문자열로 정규화해야합니다.

+0

리팩토링 화이트 스페이스 (붕괴 후 하나)가 공백 문자로 처리되는지 확실하지 않습니다. 아마 .Net의 bahavior는 정확합니다. 나에게 틀린 증거가 될 수있는 w3.org 사이트에서 XmlValidator를 찾지 못했습니다. – crauscher

0

이것은 .Net (패턴 패싯에 유의하십시오.) 패턴은 색슨에서 필요하지 않습니다.

<xs:element name="StoreCode" minOccurs="1"> 
<xs:simpleType>       
    <xs:restriction base="xs:string"> 
      <xs:whiteSpace value="collapse"/> 
     <xs:pattern value=""/> 
     <xs:minLength value="1"/> 
     <xs:maxLength value="15"/> 
    </xs:restriction> 
</xs:simpleType> 
</xs:element> 
관련 문제