2010-03-19 6 views
2

XSD 스키마를 생성하는 데있어서 최고가 아니기 때문에 실제로는 첫 번째 요소가됩니다. xml의 유효성을 검사하고 싶습니다.가변 요소 이름으로 인해 xsd 스키마를 설계 할 수 없습니다.

<?xml version="1.0"?> 
<Data> 
    <FIELD name='toto'> 
    <META mono='false' dynamic='false'> 
     <COLUMN1> 
      <REFTABLE>table</REFTABLE> 
      <REFCOLUMN>key_column</REFCOLUMN> 
      <REFLABELCOLUMN>test_column</REFLABELCOLUMN> 
     </COLUMN1> 
     <COLUMN2> 
      <REFTABLE>table</REFTABLE> 
      <REFCOLUMN>key_column</REFCOLUMN> 
      <REFLABELCOLUMN>test_column</REFLABELCOLUMN> 
     </COLUMN2> 
</META> 
<VALUEs> 
    <VALUE>...</VALUE> 
</VALUEs> 
</FIELD> 

내 문제는 META에 태그 "COLUMN1"를 차단하는 것 "COLUMN2"항상 다른, 그것은 COLUMNxxx 될 수 있습니다. 난 내 노드의 정확한 수준이 명확하지이며, 나머지는 사실을 처리하는 방법을 모르는,

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<xsd:element name="Data"> 
    <xsd:complexType> 
    <xsd:sequence> 
    <xsd:element name="FIELD" type="Field" /> 
    </xsd:sequence> 
     <xsd:attribute name="id" type="xsd:int" use="required" /> 
    </xsd:complexType> 
</xsd:element> 

<xsd:complexType name="dataSourceDef"> 
    <xsd:sequence> 
     <xsd:element name="DSD_REFTABLE" type="xsd:string" /> 
     <xsd:element name="DSD_REFCOLUMN" type="xsd:string" /> 
     <xsd:element name="DSD_REFLABELCOLUMN" type="xsd:string" /> 
    </xsd:sequence> 
</xsd:complexType> 

<xsd:complexType name="MetaTag"> 
    <xsd:sequence> 
     <xsd:any processContents="lax" /> 
    </xsd:sequence> 
    <xsd:attribute name="mono" type="xsd:string" use="required" /> 
    <xsd:attribute name="dynamic" type="xsd:string" use="required"/> 
</xsd:complexType> 

<xsd:complexType name="Field"> 
    <xsd:sequence> 
     <xsd:element name="META" type="MetaTag" minOccurs="1" /> 
     <xsd:element name="VALUEs"> 
      <xsd:complexType> 
       <xsd:sequence> 
        <xsd:any processContents="lax" /> 
       </xsd:sequence> 
      </xsd:complexType> 
     </xsd:element> 
    </xsd:sequence> 
    <xsd:attribute name="name" type="xsd:string" use="required"/> 
</xsd:complexType> 
</xsd:schema> 

그리고 난 그냥 동작하지 않습니다 : 지금 내 스키마입니다 .

제발 도와 주시겠습니까?

답변

0

나는 귀하의 스키마에서 <xsd:any/>이 하나의 단일 요소만을 허용 할 것이라고 생각합니다. 메타 속성과 같이, "하지"나머지는이 부분을 확인하고 검증 할 수있는 방법이

<xsd:sequence> 
    <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/> 
</xsd:sequence> 
3

이와 같은 문서를 가질 수없고 XML 스키마에 대해 유효성을 검사 할 수 없습니다.

<COLUMN name="Column1"/> 

을 대신 사용하십시오.

+0

: 당신은 속성으로 는 minOccursmaxOccurs에 아이들의 숫자가있을 수 있다는 것을 알려줄 필요 모든. 어쩌면 xsd : any 요소를 사용하고 있을까요? –

관련 문제