Проверка XML на XSD: элемент не может иметь символ, потому что тип содержимого типа только для элемента - PullRequest
1 голос
/ 25 февраля 2010

XML:

<?xml version="1.0" encoding="UTF-8"?>
<data>
    <ac code="JL" auto="1">
        <fee>10e</fee>
        <comission>
            <if country="JP">5%</if>
            <else>7%</else>
        </comission>
    </ac>
    <ac code="B2" auto="1">
        <fee>
            <if country="RU">35e 50e 50e 80e 15e 10e</if>
            <else>10e</else>
        </fee>
        <comission>
            <if country="RU">3%</if>
            <else>5%</else>
        </comission>
    </ac>
</data>

А XSD-схема :

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

 <xs:element name="data" type="data"/>
 <xs:complexType name="data">
  <xs:sequence>
   <xs:element name="ac" minOccurs="0" maxOccurs="unbounded" type="ac"/>
  </xs:sequence>
 </xs:complexType>

 <xs:complexType name="ac">
  <xs:sequence>
   <xs:element name="fee" type="feecomiss"/>
   <xs:element name="comission" type="feecomiss"/>
  </xs:sequence>
  <xs:attribute name="code" type="xs:string"/>
  <xs:attribute name="auto" type="xs:decimal"/>
 </xs:complexType>

 <xs:complexType name="feecomiss">
  <xs:sequence>
   <xs:element name="if" type="if" minOccurs="0" />
   <xs:element name="else" type="xs:string" minOccurs="0"/>
  </xs:sequence>
 </xs:complexType>

 <xs:complexType name="if">
 <xs:simpleContent>
  <xs:extension base="xs:string">
   <xs:attribute name="country" type="xs:string" use="optional"/>
  </xs:extension>
 </xs:simpleContent>
</xs:complexType>      

</xs:schema>

Эта схема не работает из-за того, что в первом элементе "fee" нет элементов "if" и "else"

Есть идеи? Извините за плохой английский =)

1 Ответ

1 голос
/ 25 февраля 2010

Я думаю, что ваша схема должна выглядеть так:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="data">
<xs:complexType>
  <xs:sequence>
    <xs:element maxOccurs="unbounded" name="ac">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="fee">
            <xs:complexType mixed="true">
              <xs:sequence minOccurs="0">
                <xs:element name="if">
                  <xs:complexType>
                    <xs:simpleContent>
                      <xs:extension base="xs:string">
                        <xs:attribute name="country" type="xs:string" use="required" />
                      </xs:extension>
                    </xs:simpleContent>
                  </xs:complexType>
                </xs:element>
                <xs:element name="else" type="xs:string" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>

          <xs:element name="comission">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="if">
                  <xs:complexType>
                    <xs:simpleContent>
                      <xs:extension base="xs:string">
                        <xs:attribute name="country" type="xs:string" use="required" />
                      </xs:extension>
                    </xs:simpleContent>
                  </xs:complexType>
                </xs:element>
                <xs:element name="else" type="xs:string" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
        <xs:attribute name="code" type="xs:string" use="required" />
        <xs:attribute name="auto" type="xs:unsignedByte" use="required" />
      </xs:complexType>
    </xs:element>
  </xs:sequence>
</xs:complexType>

Я сгенерировал это определение схемы до вашего XML-документа, указанного в вопросе.
Надеюсь, это поможет
Myra

...