0

我有一个名为“页面”的属性。它由两到三个双打组成,用逗号分隔,而不是空格,并带有可选的“!” 在最后。以下所有内容均有效:

page="8.5,11,3!"
page="8.5,11.4,3.1"
page="8.5,11!"
page="8.5,2.1"

我知道我可以使用模式,以下会起作用:

attribute page { xsd:string { pattern="[0-9]+(\.[0-9]+)?,[0-9]+(\.[0-9]+)(,[0-9]+(\.[0-9]+)?)?(!)?" } }

但如果可能的话,我宁愿使用这样的东西:

attribute page { xsd:double, ",", xsd:double, ( ",", xsd:double )?, ("!")? }

我可以使用“列表”完成上述工作:

attribute page { list { xsd:double, ",", xsd:double, ( ",", xsd:double )?, ("!")? } }

但是最后我在每个部分之间都有空格:

page="8.5 , 11 !"

有没有办法在不使用模式的情况下做到这一点?

4

1 回答 1

1

Relax NG 没有关于如何定义简单类型的特定规则。它旨在能够使用制定此类规则的简单类型库。所以原则上,是的,你可以在 Relax NG 中做你喜欢的事:只需使用一个简单的类型库来提供你想要的功能。

实际上,您似乎在使用简单类型的 XSD 库。虽然 XSD 确实允许定义其值是其他简单值序列的列表类型,但为了简化定义和验证器,XSD 列表值会被空白处的解析器破坏;XSD 不允许值使用任意分隔符。所以,不,你不能做你说你想做的事,使用 Relax NG 的基于 XSD 的简单类型库。

于 2013-02-16T17:41:54.973 回答