【问题标题】:XSD restrictions - whiteSpace "replace", but spaces not allowedXSD 限制 - 空白“替换”,但不允许使用空格
【发布时间】:2015-04-30 11:06:20
【问题描述】:

将空格放入遵循以下 XML 架构的消息时会发生什么?

<xs:whiteSpace value="replace"/>
<xs:pattern value="[\-\*0-9A-Z]{12}"/>

是否会用空格替换空格,然后验证失败?还是会发生其他事情?

【问题讨论】:

  • 我认为你的模式改变了空白的行为,此外,如果你使用 {12} , min 和 max lenght 是多余的。
  • 好点,谢谢。编辑。它是如何改变它的,你知道吗?
  • @Xstian 是对的(尽管我只是说该模式拒绝空格,使 xs:whiteSpace 无关紧要)。改变xs:pattern正则表达式可以illustrate那个。
  • 如果架构与描述的一样,是否会在较低级别发生某些事情?是否会用空格替换空格,然后由于模式而拒绝消息?或者它甚至不会打扰检查?即,如果 \t\t\t\t\t\t\t\t\t\t\t\t 被使用了?
  • 这 12 个制表符将被转换为空格,然后正则表达式将无法匹配。

标签: xml xsd xsd-validation


【解决方案1】:

您的 xs:pattern 正则表达式不允许使用空格,xs:whiteSpace 方面不会改变这一点。

完整的 XSD

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="root">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:whiteSpace value="replace"/>
        <xs:pattern value="[\-\*0-9A-Z]{12}"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>

</xs:schema>

XML

此 XML 将有效

<root>123456789012</root>

由于空格,此 XML 将无效

<root>1234567890 2</root>

如果 XSD 被更改为允许空格,

        <xs:pattern value="[ \-\*0-9A-Z]{12}"/>

并且 XML 中有一个选项卡:

<root>1234567890    2</root>

然后xs:whiteSpace 值会将其替换为空格,现在 XSD 会发现 XML 有效

【讨论】:

  • 那么,如果在值中放入制表符,它会在拒绝之前将其转换为空格吗?
  • 正如我在上面的评论中所说,我同意@kjhughes
  • @simonalexander2005,是的,你理解正确。答案已更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
  • 1970-01-01
  • 2015-10-04
相关资源
最近更新 更多