【问题标题】:Xml Validation - XSD 1.0Xml 验证 - XSD 1.0
【发布时间】:2018-05-24 20:22:00
【问题描述】:

是否可以在 XSD 1.0 中设置 maxOccurs 应该为所有元素固定?示例:

<row>
  <tile />
  <tile />
</row>

然后,如果我想创建一个新行,它必须正好有 2 个图块。所以它应该是这样的:

<row>
  <tile />
  <tile />
</row>
<row>
  <tile />
  <tile />
</row>

但是,我希望您可以制作无限数量的瓷砖。但它被锁定到第一行的计数。因此,如果第一行有 5 个图块,那么所有其他行中必须正好有 5 个图块。

【问题讨论】:

    标签: xml xsd-validation


    【解决方案1】:

    在 XSD 1.1 中,您可以对作为行的父元素的任何元素进行断言,表示它们都必须具有相同数量的图块:

    <xs:assert test="count(distinct-values(row/count(tile))) = 1"/>
    

    但是你不能在 XSD 1.0 中做这种事情。

    【讨论】:

    • 由于某种原因我不能使用 XSD 1.1。但是,有人使用 Schematron 命名,是否可以应用您刚刚使用它所做的事情?
    • 是的,使用 Schematron 完全可以做到这一点,但我不是可以帮助您的人。 (请在此处提问之前尝试自己找出答案!)
    【解决方案2】:

    不,据我所知这是不可能的。在 XSD (1.1) 的下一个版本中,您可以通过添加 Schematron 规则。

    作为替代方案,请考虑进行两次验证:首先将其通过您的架构。之后使用 Schematron 进行第二次传递。在 Schematron 中,您可以检查这些类型的内容。

    【讨论】:

    • 如何使用“Schematron”来做我想做的事?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多