繁体   English   中英

.NET中的标准xml模式(xsd)类型的自定义验证

[英]Custom validation of standard xml schema (xsd) type in .net

我的问题是这样的:

  1. 我有很多由第三方生成的XSD文件,用于检查文档类型的一致性
  2. 他们使用标准类型(即gYeardate )而没有意识到其实际限制
  3. 他们还使用硬编码的检查,这些检查比XSD中使用的这些标准类型具有更多的限制(即, gYear的数字之前或之后的空格是可以的,但会在他们这边失败)
  4. 更改架构确实不是可行的方法(XSD众多且经常更新)

因此,这是一个问题:我可以执行哪些更严格的规则来验证某些标准类型? 我使用.NET 3.5(C#),我们在标准XmlReader周围有一个包装器,因此根本不选择使用3rd party项目。 我考虑过使用其他预定义类型加载其他模式文件,这些预定义类型将扩展/覆盖所需的类型, 或者以某种方式赶上所需的类型验证节点并且我可以窥视所述节点的值的那一刻,但是我不是确定如何进行。

附加要求:验证过程应该是流式的(即没有XmlDocument等)。

好吧,据我所知,确实没有解决此问题的简单方法。

我能想到的最好的办法是在读取架构并将其放入缓存时对其进行修改。

我只需删除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 ,因此您不能从更合适的类型(例如gYearshortdecimal继承。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM