XSD 以分号分隔的双精度值列表模式

XSD pattern for semicolon seperated list of double values

有没有办法为分号分隔的双精度值指定 XSD 模式?

<test>2.5;25.2e7;-0.5e8</test>

这是我的方法:

 <xsd:pattern value="[-+]?[0-9][0-9]*.[0-9][0-9]*([eE][-+]?[0-9][0-9]*)?(;?[-+]?[0-9][0-9]*.[0-9][0-9]*)*"/>

但我仍然发现很多示例,其中它给我验证错误。如果找到类似 \d+ 的内容,但到目前为止没有帮助。

感谢您的回答!

如果您只想在冒号前后允许两位数字,那么您的模式中所缺少的只是第二个和后续浮点数的重复模式中的指数表达式。您应该按如下方式修改您的模式:

<xs:pattern value="[-+]?[0-9][0-9]*.[0-9][0-9]*([eE][-+]?[0-9][0-9]*)?(;?[-+]?[0-9][0-9]*.[0-9][0-9]*([eE][-+]?[0-9][0-9]*)?)*"/>

或者在更紧凑的版本中,为了可读性,还添加了一些括号,并允许冒号前后有更多数字:

<xs:pattern value="([-+]?\d+.\d+([eE]?\d+)?)(;([-+]?\d+.\d+([eE]?\d+)?))*"/>

可以限制为冒号前后两位数:

<xs:pattern value="([-+]?\d{1,2}.\d{1,2}([eE]?\d{1,2})?)(;([-+]?\d{1,2}.\d+([eE]?\d{1,2})?))*"/>