2013-10-29 80 views
1

在生成XML文件時,我使用由OMG定義的xsd文件。通過互聯網驗證需要太長時間。所以,我下載了所有這些文件進行本地驗證。這適用於簡單的情況。但是在繼續前進時,必須驗證更復雜的結構。這包括驗證xhtml結構。大多數從http://www.w3.org/MarkUp/SCHEMA下載的xsd文件都有驗證錯誤。在試圖解決它們時,我將注意力集中在文件xhtml11-model-1.xsd上,因爲這個文件包含了很多其他xsd文件使用的基本定義。最初的下載文件顯示71個驗證錯誤!下載的文件沒有聲明目標名稱空間,因此我添加了聲明。這樣做可以將錯誤的數量減少到4個。但是在這一點上,我陷入了困境。我根本沒有發現任何意思來糾正其餘的錯誤。我挑出其中一個來分析它作爲孤立的案例。見下面的代碼。 attributeGroup name =「xhtml.dir.attrib」的聲明可以在文件xhtml-bdo-1.xsd中找到。但是這個文件沒有通過驗證,因此我將聲明覆制到我的測試文件中,以便將所有文件放在一個地方。但在確認與日食開普勒這個簡單的例子,我得到的錯誤如下的裁判xhtml.dir.attrib:在驗證xhtml11-model-1.xsd時出現驗證錯誤

<xs:attributeGroup ref="xhtml.dir.attrib" /> 
s4s-elt-must-match.1: The content of 'xhtml.I18n.extra.attrib' must match (annotation?, ((attribute | attributeGroup)*, anyAttribute?)). A problem was found starting at: attributeGroup. 

什麼是錯的?爲什麼在聲明顯示正確時引用聲明瞭錯誤。這是eclipse驗證器的問題嗎?我的誤解?我應該忽略這些驗證錯誤嗎?爲什麼從w3.org下載的xsd文件沒有targetNamespace聲明,因爲它似乎需要驗證和使用這些文件? 感謝您的任何提示。

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.w3.org/1999/xhtml/datatypes/" 
xmlns:xh11d="http://www.w3.org/1999/xhtml/datatypes/" 
elementFormDefault="qualified" > 

<xs:attributeGroup name="xhtml.dir.attrib"> 
    <xs:annotation> 
     <xs:documentation> 
      "dir" Attribute from Bi Directional Text (bdo) Module 
     </xs:documentation> 
    </xs:annotation> 
    <xs:attribute name="dir"> 
     <xs:simpleType> 
      <xs:restriction base="xs:NMTOKEN"> 
       <xs:enumeration value="ltr" /> 
       <xs:enumeration value="rtl" /> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:attribute> 
</xs:attributeGroup> 

<xs:attributeGroup name="xhtml.I18n.extra.attrib"> 
    <xs:annotation> 
     <xs:documentation>Extended I18n attribute</xs:documentation> 
    </xs:annotation> 
    <xs:attributeGroup ref="xhtml.dir.attrib" /> 
    <xs:attribute name="lang" type="xh11d:LanguageCode" /> 
</xs:attributeGroup> 
</xs:schema> 

回答

0

對於您所提供的特定片段中,驗證錯誤消失,如果你只是確保有一個默認的命名空間,你的目標名稱(我剛剛在another post上如此解釋這個在這裏),你匹配使XSD處理器可以使用「xh11d」命名空間(不管怎樣,通過目錄或直接通過xs:import)。

我會說你不應該忽略驗證錯誤,至少不能直到你做出明智的決定。

我會下載XSD,我會自己看看;如果有什麼值得的話,我會在這裏告訴你。

+0

在我的代碼片段添加默認名稱空間的錯誤消失了。到目前爲止,提示是正確的。修改爲: \t \t 但是這並未」 t真的有幫助他原來的xsd和問題是,爲什麼我應該修改w3站點的xsd? – juerg

+0

我想這些文件是公開的,已經過徹底測試,爲什麼他們在w3網站工作,但不在本地?此外,我觀察到循環依賴,這實際上沒有幫助!你如何處理這種情況? – juerg

+0

我個人認爲這些文件已經過徹底測試。至少基於可用的工具(基於.NET和Java),某些XSD無效。 (我仍在研究它...例如,我得到一個cvc-enumeration-aria-attributes-1.xsd文件中'aria-related'屬性的默認值無效...)循環依賴性很差在包裝方面...但它不應該是一個問題......如果您刪除所有架構位置並手動將所有文件放在模式集合中......循環依賴關係消失,而內容仍然正確...... –