我遇到的问题是:
gYear
和date
)而未实现其真正的限制gYear
的数字之前或之后的空格都可以,但是会在他们身边失败)< / LI>
所以,问题在于:我可以采取哪些措施来强制执行更严格的规则来验证某些标准类型?
我使用.NET 3.5(C#),我们有一个标准XmlReader
的包装器,因此使用第三方项目根本不是一个选项。
我考虑使用一些预定义类型加载其他模式文件,这些类型将扩展/覆盖所需类型,或以某种方式捕获所需类型验证节点的时刻,我可以查看所述值的值节点,但我不确定如何继续。
附加要求:验证过程应该是流式传输(即没有XmlDocument
等)。
答案 0 :(得分:0)
嗯,据我所知,这个问题确实没有任何简单的解决办法。
我能想到的最好的方法是在读取模式时将其修改为缓存。
我只需删除type="xs:gYear"
并添加<simpleType>
子元素(如果需要):
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="^(19|2\d)\d{2}$" />
</xs:restriction>
</xs:simpleType>
幸运的是,我们拥有将验证错误转换为人类可读错误的基础架构,因此不应混淆实际架构与这些元素的验证错误之间的差异。
另外,值得注意的是,XML Schema中的每个类型都将facet whiteSpace
设置为collapse
,因此您无法继承更合适的类型,例如gYear
, short
或decimal
。