2011-11-28 173 views
0

我喜歡這個xml文件這個XML驗證錯誤

<?xml version="1.0" encoding="UTF-8"?> 
<specification xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
xsi:noNamespaceSchemaLocation="file://Desktop/normal.xsd"> 
    <university> 
    <refstr>bdvl_te_skrm_stc</refstr> 
    <ref_complete_customer path="/work/bsr.xml"/> 
    <Code>A0f11478</Code> 
    <Area>sku</Area> 
    <started>1987</started> 
    <branch> 
     <electronics> 
     <students Nr="120" ece="ab"> 
      <student Name="svr" year="2010" rank="3"/> 
      <student Name="bvr" year="2010" rank="1"/> 
     </students> 
     </electronics> 
    </branch> 
    <semister> 
     <semister num="3"/> 
     <extrainfo/> 
    </semister> 
    <address> 
     <extrainfo> some data. 
     </extrainfo> 
    </address> 
    </university> 
</specification> 

genarated XSD架構的XML文件是

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"  
    xmlns:wmh="http://www.wmhelp.com/2003/eGenerator" elementFormDefault="qualified"> 

<xs:element name="specification"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element ref="university"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:element name="university"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element ref="refstr"/> 
     <xs:element ref="ref_complete_customer"/> 
     <xs:element ref="Code"/> 
     <xs:element ref="Area"/> 
     <xs:element ref="started"/> 
     <xs:element ref="branch"/> 
     <xs:element ref="semister"/> 
     <xs:element ref="address"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:element name="refstr" type="xs:string"/> 

<xs:element name="ref_complete_customer"> 
    <xs:complexType> 
    <xs:attribute name="path" type="xs:string" use="required"/> 
    </xs:complexType> 
</xs:element> 

<xs:element name="Code" type="xs:string"/> 

<xs:element name="Area" type="xs:string"/> 

<xs:element name="started" type="xs:string"/> 

<xs:element name="branch"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element ref="electronics"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:element name="electronics"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element ref="students"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:element name="students"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element ref="student" maxOccurs="unbounded"/> 
    </xs:sequence> 
    <xs:attribute name="Nr" type="xs:string" use="required"/> 
    <xs:attribute name="ece" type="xs:string" use="required"/> 
    </xs:complexType> 
</xs:element> 

<xs:element name="student"> 
    <xs:complexType> 
    <xs:attribute name="Name" type="xs:string" use="required"/> 
    <xs:attribute name="year" type="xs:string" use="required"/> 
    <xs:attribute name="rank" type="xs:string" use="required"/> 
    </xs:complexType> 
</xs:element> 

<xs:element name="semister"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element ref="semister"/> 
     <xs:element ref="extrainfo"/> 
    </xs:sequence> 
    <xs:attribute name="num" type="xs:string"/> 
    </xs:complexType> 
</xs:element> 

<xs:element name="extrainfo" type="xs:string"/> 

<xs:element name="address"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element ref="extrainfo"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

</xs:schema> 

但是當我驗證此XML類型的提示錯誤這樣

「element university {}的模式定義結構無效,此錯誤顯示在大學節點的」地址元素「處。」

我不能糾正這個錯誤,任何人都可以告訴我如何修改這個錯誤。我該如何改變模式。當我驗證模式時,它沒有錯誤。

在此先感謝。

回答

3

如果我通過使用提供的XML Schema進行驗證來運行XML,則我看不到address元素有任何問題。然而,在你的模式中,元素定義是指它自己。由於它沒有指定最小出現次數,因此默認值爲1.這有效地創建了無限遞歸要求。考慮改變你這樣的XML架構...

<xs:element name="semister"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element ref="semister" minOccurs="0"/> 
      <xs:element ref="extrainfo" minOccurs="0"/> 
     </xs:sequence> 
     <xs:attribute name="num" type="xs:string"/> 
    </xs:complexType> 
</xs:element> 

或者任何看起來合適的約束並不強制無限遞歸。

+0

**無限遞歸**。哦,我記得那些美好的舊日子。 :D – WORMSS

+1

@WORMSS您是否正在使用一些美妙的編程語言,但不允許這種情況發生?請與我們分享,我也想使用它:D –

0

您的問題是與semister元素定義。這是一個不可能的遞歸定義。

<xs:element name="semister"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="semister"/> 
       <xs:element ref="extrainfo"/> 
      </xs:sequence> 
      <xs:attribute name="num" type="xs:string"/> 
     </xs:complexType> 
    </xs:element> 

下面的XML是無效的,因爲所述內semister元件是無效的,因爲它不包含semister和extrainfo元件。

<semister> 
      <semister num="3"/> 
      <extrainfo/> 
</semister>