2010-04-09 108 views
0

我正在尋找創建一個XSD文檔來爲我驗證一些XML。比方說,例如,XML文檔是用來描述書:關於使用XSD進行XML驗證的問題

<?xml version="1.0" encoding="UTF-8"?> 
<book> 
    <comment>Bob's very first book</comment> 
    <name>Bob's book</name> 
    <author>Bob</author> 
    <year>2009</year> 
    <publisher> 
     <name>Dan's book publishing enterprise</name> 
     <address>123 Fake St.</address> 
    </publisher> 
</book> 

我們也可以說,我只真正關心的三大要素 - 名稱,作者和年份。它們是強制性的,應該根據模式進行驗證。我不控制我收到的XML文件,所以元素的順序應該不重要,並且任何其他元素都將被允許通過XSD驗證未經檢查。

遵循這些要求,我試圖構建一個能夠做這種驗證的XSD模式,但我無法把它做好。可以按任何順序定義元素的約束規則排除了sequence指示符。剩下的是allchoice指標。 all將是明顯的選擇,但它不允許我使用any元素。

我也玩弄使用這種的想法:

<include schemaLocation="year.xsd"/> 
<include schemaLocation="name.xsd"/> 
<include schemaLocation="author.xsd"/> 
.... 
    <sequence> 
     <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> 
    </sequence> 

而如果XML文件中找到,名稱一年,筆者將被驗證,這不檢查強制性內容 - 我不能指定的年,作者和該書的名稱都需要通過驗證。

任何人都可以給我提示如何構建一個XSD文檔,它將驗證一些無序的強制性元素,並仍然允許XML文件中的未定義元素通過驗證?

謝謝!

回答

1

我確信你不能用XML Schema來做到這一點。意見建議:

  • 準備你的文件用XSLT驗證。
  • 使用Schematron
+0

看起來你是對的...... – Sevas 2010-04-15 14:20:52