2011-11-28 146 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>