cra*_*her 6 xml schema whitespace
我使用以下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>
Run Code Online (Sandbox Code Playgroud)
它定义了一个requiredStringType,它必须至少有一个字符长,并且还定义了空白崩溃.
当我验证以下Xml文档时,验证成功:
<?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>
Run Code Online (Sandbox Code Playgroud)
w3.org定义了空白崩溃:
"在替换所暗示的处理之后,#x20的连续序列被折叠为单个#x20,并且前导和尾随#x20被删除."
这是否意味着3个空格被折叠为一个或零个空格?在XmlSpy中,验证失败,在.Net中它成功.
由于它表示删除了前导和尾随空格,这意味着只包含空格的字符串将折叠为空字符串.XmlSpy在验证中是准确的,而.NET是慷慨的(或者是出错).
这是根据验证期间空白规范化,从XML Schema第一部分:结构第二版.
保留
不进行标准化,值为·标准化值·
替换
#x9(空格)替换所有出现的#x9(制表符),#xA(换行符)和#xD(回车符)>.
崩溃
在替换上面指定的替换之后,将#x20s的连续序列折叠为单个#x20,并删除初始和/或最终#x20s.
因此,首先将所有空格替换为空白字符,将第二个连续序列替换为单个空白字符,第三个和最后一个,删除初始和最终空白.在此序列之后,在验证期间必须将仅包含空格的字符串规范化为空字符串.
| 归档时间: |
|
| 查看次数: |
12695 次 |
| 最近记录: |