2011-11-28 7 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 이러한 유형의 유효성을 검사 할 때이

같은 오류를 제공

"요소 대학 {}의 스키마 정의에 잘못된 구조가 있습니다.이 오류는 대학 노드의"주소 요소 "에 표시됩니다."

이 오류를 해결할 수 없으므로이 오류를 수정하는 방법을 알려줄 수 있습니다. 스키마에서 무엇을 변경해야합니까? 스키마를 확인할 때 오류가 없습니다.

미리 감사드립니다.

답변

3

제공된 XML 스키마를 사용하여 유효성 검사를 통해 XML을 실행하면 address 요소에 문제가 없습니다. 그러나 스키마에서 semister 요소 정의는 자체를 참조합니다. 최소 발생을 지정하지 않으므로 기본값은 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> 

semister 및 extrainfo 요소가 없으므로 내부 semister 요소가 유효하지 않으므로 아래 XML이 유효하지 않습니다.

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