2011-10-14 61 views
0

我工作的一個XSD架構添加複雜類型的元素,我一直在問的概念節點上添加一個新的複雜類型,它看起來像這樣:我應該在哪裏在這個XSD架構

<xs:element name="Conceptos">     
      <xs:complexType> 
       <xs:sequence> 
        <xs:element name="Concepto" maxOccurs="unbounded"> 
         <xs:complexType>  
         <xs:choice minOccurs="0"> 
           <xs:element name="InformacionAduanera" type="cfdi:t_InformacionAduanera" minOccurs="0" maxOccurs="unbounded">           
           </xs:element> 
           <xs:element name="CuentaPredial" minOccurs="0"> 
            <xs:annotation> 
             <xs:documentation>Nodo opcional para asentar el número de cuenta predial con el que fue registrado el inmueble, en el sistema catastral de la entidad federativa de que trate.</xs:documentation> 
            </xs:annotation> 
            <xs:complexType> 
             <xs:attribute name="numero" use="required"> 
              <xs:annotation> 
               <xs:documentation>Atributo requerido para precisar el número de la cuenta predial del inmueble cubierto por el presente concepto en caso de recibos de arrendamiento.</xs:documentation> 
              </xs:annotation> 
              <xs:simpleType> 
               <xs:restriction base="xs:string"> 
                <xs:whiteSpace value="collapse"/> 
                <xs:minLength value="1"/> 
               </xs:restriction> 
              </xs:simpleType> 
             </xs:attribute> 
            </xs:complexType> 
           </xs:element> 

         </xs:choice>           
          <xs:attribute name="cantidad" use="required">          
           <xs:simpleType> 
            <xs:restriction base="xs:decimal"> 
             <xs:whiteSpace value="collapse"/> 
            </xs:restriction> 
           </xs:simpleType> 
          </xs:attribute> 
          <xs:attribute name="unidad" use="optional">         
           <xs:simpleType> 
            <xs:restriction base="xs:string"> 
             <xs:whiteSpace value="collapse"/> 
             <xs:minLength value="1"/> 
            </xs:restriction> 
           </xs:simpleType> 
          </xs:attribute> 
          <xs:attribute name="noIdentificacion" use="optional">          
           <xs:simpleType> 
            <xs:restriction base="xs:string"> 
             <xs:minLength value="1"/> 
             <xs:whiteSpace value="collapse"/> 
            </xs:restriction> 
           </xs:simpleType> 
          </xs:attribute> 
          <xs:attribute name="descripcion" use="required">           
           <xs:simpleType> 
            <xs:restriction base="xs:string"> 
             <xs:minLength value="1"/> 
             <xs:whiteSpace value="collapse"/> 
            </xs:restriction> 
           </xs:simpleType> 
          </xs:attribute> 
          <xs:attribute name="valorUnitario" type="cfdi:t_Importe" use="required"> 

          </xs:attribute> 
          <xs:attribute name="importe" type="cfdi:t_Importe" use="required"> 

          </xs:attribute> 
         </xs:complexType> 
        </xs:element> 
       </xs:sequence> 
      </xs:complexType> 
     </xs:element>  

的XSD的這部分驗證XML

<cfdi:Conceptos> 
<cfdi:Concepto cantidad="1.0" noIdentificacion="15" descripcion="Autotransporte terrestre de bienes" valorUnitario="10" importe="10" /> 
    <cfdi:Concepto cantidad="1.0" noIdentificacion="19" descripcion="PF a PM Retencion 2/3 IVA" valorUnitario="10" importe="10"> 
<cfdi:InformacionAduanera numero="123456" fecha="2011-07-13" aduana="Nuevo Laredo"/> 
</cfdi:Concepto> 

所以我想要做的就是添加新的元素下面的代碼片段,因此XML是這樣的:

<cfdi:Conceptos> 
<cfdi:Concepto cantidad="1.0" noIdentificacion="15" descripcion="Autotransporte terrestre de bienes" valorUnitario="10" importe="10" /> 
    <cfdi:Concepto cantidad="1.0" noIdentificacion="19" descripcion="PF a PM Retencion 2/3 IVA" valorUnitario="10" importe="10"> 
<cfdi:InformacionAduanera numero="123456" fecha="2011-07-13" aduana="Nuevo Laredo"/> 
<cfdi:OptDetail name="TransID" value="34545" /> 
<cfdi:OptDetail name="Purchase" value="8745" /> 
<cfdi:OptDetail name="StoreID" value="1" /> 
<cfdi:OptDetail name="someName" value="SomeValue" /> 
<cfdi:OptDetail name="XXXX" value="YYYY" /> 
. 
. 
. 
N 
</cfdi:Concepto> 

正如您所看到的,我想爲每個Concepto添加一個新元素(optDetail),其中minOccurs = 0且maxOccurs = unbouded.It與InformacionAduanera節點幾乎相同(我沒有看到顯示的要點這裏是這種類型的定義),但是,InformacionAduanera受到選擇限制。

所以我做什麼,是我定義我喜歡的類型第一

<xs:complexType name="optDetail">  
    <xs:attribute name="name" use="required"> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"> 
       <xs:minLength value="1"/> 
       <xs:whiteSpace value="collapse"/> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:attribute> 
    <xs:attribute name="value" use="required">   
     <xs:simpleType> 
      <xs:restriction base="xs:string"> 
       <xs:minLength value="1"/> 
       <xs:whiteSpace value="collapse"/> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:attribute> 
</xs:complexType> 

我試圖在增加了XSD,但沒有成功,我得到了這樣的錯誤的元素節點是放錯地方或或太多出現了元素標籤,所以問題是我應該在哪裏應用它來驗證我上面顯示的XML?

謝謝!

回答

1

確保您的optDetail複雜類型添加到xs:schema元素下(因爲它已被命名,所以必須是全局的)。答案如下(爲了簡潔,我已經刪除了內容)。

<xs:element name="Conceptos"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="Concepto" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:choice minOccurs="0"> 
          <xs:element name="InformacionAduanera" type="cfdi:t_InformacionAduanera" minOccurs="0" maxOccurs="unbounded"/> 
          <xs:element name="CuentaPredial" minOccurs="0">...</xs:element> 
         </xs:choice> 
         <xs:element name="OptDetail" type="cfdi:optDetail" minOccurs="0" maxOccurs="unbounded"/> 
        </xs:sequence> 
        <xs:attribute name="cantidad" use="required"> 
         ... 
        </xs:attribute> 
        ... 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:complexType name="optDetail"> 
    ... 
</xs:complexType> 
相關問題