2012-12-27 31 views
0

爲什麼xmllint不報告以下xsd和xml的驗證失敗?xmllint無效輸入驗證成功

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 

回答

2

輸入看起來並不有效,我(馬克·奧康納說,這是有效的,但我沒有看到任何參數這個效果,只是一個直截了當的陳述)。同樣重要的是,它對Xerces J或Saxon EE看起來並不合適。

xmllint中的XSD支持已知有點多餘,但主要是這意味着有部分規範不支持;這看起來更像是正則表達式例程中的一個簡單的錯誤。我在gnome bugtracker for libxml中看到了幾個未解決的正則表達式錯誤;也許這是相關的。我已經打開new bug report這個問題。

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> 
+0

但爲什麼模式本身不起作用? 「+」是否意味着1個或更多? – user511274

+0

@ user511274回答修改 –

+0

感謝您的更新答案。但我的問題真的是我的原始模式有什麼問題。 xmllint是否有bug? – user511274