【问题标题】:Relax ng - restricting total string length (maxLength) for mixed content放松 ng - 限制混合内容的总字符串长度 (maxLength)
【发布时间】:2014-10-24 09:33:11
【问题描述】:

有没有办法限制混合内容元素的内容长度,或者有其他方法可以做到吗?

我希望 Relax ng 架构要求“属性”元素内的文本(在下面的示例 XML 中)限制为一定数量的字符。

示例 XML:

<attribute>
    , <tag>ART_QUANTITY</tag> single page etc. 
    Any number of characters is currently accepted here... 
    I would like to restrict this to the same number of characters 
    as in the source of this text, which is a database field.
</attribute>

我当前的 Relax ng 架构,不关心长度。

<element name="attribute">
    <mixed>
        <!-- The text may contain references to other fields, which we indicate (surrond) with a tag -->
        <zeroOrMore>
            <element name="tag">
                <data type="NMTOKEN"/>
            </element>
        </zeroOrMore>
    </mixed>
</element>

【问题讨论】:

    标签: xml xsd constraints relaxng


    【解决方案1】:

    我怀疑这在 RELAX NG 中是否可行。可能最简单的方法是将“属性”元素的内容序列化为字符串,并使用您使用的任何编程语言检查其长度。 (参见例如 Python lxml 库)

    【讨论】:

    • 另一家公司正在为我们的 XML 请求架构,因此我无法控制验证工具或语言。
    • 在主 XML 文档中可访问标记是否重要?我能想到的唯一其他解决方案是转义标签。
    • 标记是数据库中文本的一部分(标记标记不是标准的 XML 标记),但在导出为 XML 时被制成元素,以便其他公司的应用程序能够“锁定”它们,而其余文本显示为可编辑。我相信其他应用程序要求标签是真正的 xml 元素。我会通知我的客户关于长度要求,它不能在模式中设置。似乎这对于 XML Schemas (XSD) 也是不可能的。
    • 对。所以你不能在这里转义 XML (&amp;lt;tag&amp;gt;ART_QUANTITY&amp;lt;/tag&amp;gt;),让其他应用程序转义标签吗?
    • 使用此 XML 的其他应用程序不受我们控制。我不知道它将如何处理转义字符串。我只知道我们曾经被要求将文本中的“标签”制作成真正的 XML 元素,我猜是因为其他应用程序不像我们的 XML 那样容易适应。几年后,我现在正在制作这个模式,我宁愿不更改 XML 的格式,因为它可能会影响其他客户。我会把你的答案设置为正确的。
    【解决方案2】:

    如果您的 RNG 处理器接受 Schematron 规则,请指定一个 Schematron 规则,说明“string-length(string(.))

    如果您的 RNG 处理器不接受 Schematron 规则,而只接受纯 RNG,我认为您不走运。

    【讨论】:

      猜你喜欢
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多