【问题标题】:XSD Schema restriction - prohibit specific character pair in the stringXSD Schema 限制 - 禁止字符串中的特定字符对
【发布时间】:2013-06-07 18:25:45
【问题描述】:

我正在寻找一种方法来限制表示 unicode 字符的字符对出现在生成的 XML 中。此字符对是 (例如 »)。我正在尝试在 XSD 架构中创建一个模式 - 以匹配此类字符对 () 是否出现在 XML 文件中的任何位置。如果出现这样的对,那么 XML 验证应该会失败。该限制还应考虑到最小字符串长度等于 1 和最大长度为 79 的事实。

我一直在尝试使用以下正则表达式 patternvalue="[^]{1,79}" 但它没有按预期工作。 XML 设计为采用 ISO-8859-2 格式编码,因此不允许使用任何类型的 unicode 条目。

建立这种限制的正确正则表达式是什么?

提前谢谢你。杰克

【问题讨论】:

    标签: xml xsd-validation


    【解决方案1】:

    XML Schema 看到和验证的数据是实体和字符引用扩展之后的数据。因此,如果 XML 文件包含»,那么模式处理器看到的是»。你不能在 XSD 中禁止 » 而不禁止 »

    【讨论】:

    • 问题是我只想禁止以 开头的所有内容 - 如果序言中的编码设置为 iso,XML 处理器是否会将此类数据扩展为“双直角引号” -8859-2 ?
    • 是的。实体扩展和编码是完全无关的。首先,使用适当的编码将字节解码为字符;然后检测并扩展字符序列中的实体/字符引用;然后应用 XSD 验证。
    • 换句话说,是否有一种模式会拒绝所有 unicode 字符并将所有 ISO-8859-2 字符视为有效字符?显然我可以列出我的模式中允许的所有字符(正匹配),但我有一种奇怪的感觉,那就是有更好的方法。
    • 示例:一、二、三>应视为有效,一、二、»、三应视为无效并且整个 XML 应该被拒绝,因为 &xBB 在 ISO-8859-2 字符集中没有表示。
    • 您只需要构建一个匹配 ISO-8859-2 中所有字符的正则表达式。应该不会太难。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    相关资源
    最近更新 更多