2009-03-20 18 views
4

は、私は、次のXMLスキーマを使用します。それは、少なくとも1つの文字でなければなりません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年代の連続配列をに崩壊しています1つの#x20と先頭と末尾の#x20が削除されます。

これは、3つの空白が1つまたはゼロの空白に折りたたまれていることを意味しますか? XmlSpyでは検証が失敗し、.NETでは成功します。

答えて

4

先頭と末尾の空白は削除されているので、空白のみを含む文字列は空の文字列に折りたたまれます。 XmlSpyはバリデーションにおいて正確であり、.NETは寛大である(またはエラーを起こしている)。

White Space Normalization during ValidationからXML Schema Part 1: Structures Second Editionまでです。

ませ正規化が行われません
を維持、値は・規格化した値・
は#のX9(タブ)の
すべての出現、の#xA(改行)と#xDを(置き換えでありますキャリッジリターン)は#x20(スペース)で置き換えられます。
崩壊
置き換える下上に特定の置換に続いて、#x20sの連続配列 単一#1 X20に折りたたまれ、初期および/または最終#1 x20sが削除されています。

したがって、すべての空白は空白文字で置き換えられ、2番目の連続したシーケンスは1つの空白文字で置き換えられ、3番目と最後の空白文字が削除されます。このシーケンスの後で、空白のみを含む文字列は、検証中に空の文字列に正規化する必要があります。

+0

リメインホワイトスペース(折りたたみ後のホワイトスペース)が先頭の空白として扱われるかどうかはわかりません。多分.Netの賞賛は正しいです。私は間違っていると証明できるw3.orgサイトでXmlValidatorを見つけられませんでした。 – crauscher

0

これは、Saxonで必要とされない.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> 
関連する問題