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はそれが有効であると言っていますが、その効果に対する議論は見当たらず、ただのはげしい声明です)。同様に、XercesJやSaxonEEには有効ではないようです。

xmllintでのXSDサポートは少しむらがあることが知られていますが、ほとんどの場合、サポートされていない仕様の部分があることを意味します。これは、正規表現ルーチンの単純なバグのように見えます。libxmlのgnomeバグトラッカーに未解決の正規表現のバグがいくつかあります。おそらくこれは関連しています。この問題に関する新しいバグレポートを開きました。

于 2012-12-29T02:02:47.643 に答える
0

入力は有効です。長さに関する制限を追加する必要があります。これをXMLスキーマの「機能」と呼びます:-)

<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 に答える