0

为什么 xmllint 不报告以下 xsd 和 xml 的验证失败?

t.xsd

<?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="letter">
   <xs:simpleType>
      <xs:restriction base="xs:string">
      <xs:pattern value="([a-z])+"/>
      </xs:restriction>
   </xs:simpleType>
</xs:element>
</xs:schema>

t.xml

 <letter></letter>

$ ./xmllint --schema t.xsd t.xml

<?xml version="1.0"?>
<letter/>
t1.xml validates
4

2 回答 2

2

输入对我来说似乎无效(Mark O'Connor 说它是有效的,但我没有看到任何关于这种效果的论据,只是一个光秃秃的陈述)。同样重要的是,对于 Xerces J 或 Saxon EE,它看起来并不有效。

众所周知,xmllint 中的 XSD 支持有点参差不齐,但这主要意味着规范的某些部分不受支持。这看起来更像是正则表达式例程中的一个简单错误。我在libxml 的 gnome bugtracker 中看到了几个未解决的正则表达式错误;也许这是相关的。我已经打开了一个关于这个问题的新错误报告

于 2012-12-29T02:02:47.643 回答
0

输入有效。您需要添加额外的长度限制......称之为 XML Schema 的“功能”:-)

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="letter">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="([a-z])+"/>
        <xs:minLength value="1"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
</xs:schema>

更新

如下修改了架构,然后它似乎可以按您的预期工作

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="letter">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="[a-z]+"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
</xs:schema>
于 2012-12-28T11:28:37.017 回答