【问题标题】:Custom validation of standard xml schema (xsd) type in .net.net 中标准 xml 模式 (xsd) 类型的自定义验证
【发布时间】:2011-12-01 14:01:24
【问题描述】:

我遇到的问题是这样的:

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

那么,问题来了:我可以做些什么来执行更严格的规则来验证某些标准类型? 我使用 .NET 3.5 (C#) 并且我们有一个围绕标准 XmlReader 的包装器,因此使用 3rd 方项目根本不是一个选项。 我考虑过使用一些预定义的类型加载额外的模式文件,这些类型将扩展/覆盖所需的类型,以某种方式捕捉到所需类型正在验证节点的时刻,我可以查看所述的值节点,但我不确定如何继续。

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

【问题讨论】:

  • 您是在发送还是接收消息?
  • @hugh 我正在发送用户生成的内容

标签: c# .net validation xsd


【解决方案1】:

嗯,据我所知,这个问题确实没有任何简单的解决方案。

我能想到的最好办法就是在读取模式时修改模式以放入缓存。

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

【讨论】:

    猜你喜欢
    • 2012-07-26
    • 2014-02-26
    • 2014-11-04
    • 1970-01-01
    • 2023-03-27
    • 2019-11-06
    • 2010-09-06
    • 1970-01-01
    • 2012-08-26
    相关资源
    最近更新 更多