Схема XML не проверяется - PullRequest
0 голосов
/ 01 ноября 2019

Я работаю над XML и схемами. Мне нужна помощь в проверке моей схемы, так как, когда я помещаю ее в онлайн-валидатор, я получаю сообщение об ошибке: S4s-elt-must-match.1: Содержимое 'sequence' должно совпадать (annotation ?, (element | Group |Выбор | Последовательность | Любая) *). Обнаружена проблема, начиная с: ComplexType.

Я использую дизайн "Русская кукла", так как он мне нравится больше всего.

catalog.xml

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<catalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance" xsi:noNamespaceSchemaLocation="catalog.xsd">
   <photo cid="c1749" donatedBy="John Borelli">
      <name metadata="tunis cooper property museum">Tunis R. Cooper property</name>
      <description>
      <![CDATA[ 
         A more recent picture of the property taken by the Borelli family.  The property is listed in the 
         National and New Jersey Registers of Historic Places.
      ]]>
      </description>
      <date>circa 1950</date>
      <images>
         <img src="1749a.jpg" />
      </images>
   </photo>

   <photo cid="c1411" donatedBy="Saint Johns Catholic Church">
      <name metadata="saint johns catholic church">Saint Johns Church</name>
      <description>
      <![CDATA[ 
         A more recent picture of the property taken by the Borelli family.  The property is listed in the 
         National and New Jersey Registers of Historic Places.
      ]]>
      </description>      
      <date>1921</date>
   </photo>
</catalog>

catalog.xsd

<?xml version="1.0" encoding="UTF-8" ?>     
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="catalog">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="photo"/>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="name" type="xs:string"/>
                        <xs:element name="description" type="xs:string"/>
                        <xs:element name="data" type="xs:string"/>
                        <xs:element name="images">
                            <xs:complexType>
                                <xs:simpleContent>
                                    <xs:element name="img"/>
                                </xs:simpleContent>
                            </xs:complexType>
                        </xs:element>
                        <xs:attribue name="cid" type="xs:string"/>
                        <xs:attribue name="donatedBy" type="xs:string"/>
                        <xs:attribue name="metadata" type="xs:string"/>
                        <xs:attribue name="src" type="xs:string"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:sequence>
        </xs:complexType>
    </xs:element>    
</xs:schema>

1 Ответ

1 голос
/ 01 ноября 2019

У вас было несколько ошибок в вашем XSD. И один в вашем XML.

Чтобы удалить эту единственную ошибку в вашем XML, измените пространство имен в элементе <catalog...> с xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance" на xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance". Простая опечатка.

И ваш XSD должен выглядеть так, чтобы проверить ваш XML:

<?xml version="1.0" encoding="UTF-8" ?>     
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="catalog">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="photo" maxOccurs="unbounded">
                    <xs:complexType>                        
                        <xs:sequence>
                            <xs:element name="name">
                                <xs:complexType>
                                    <xs:simpleContent>
                                        <xs:extension base="xs:string">
                                            <xs:attribute name="metadata" type="xs:string"/>
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>                                
                            </xs:element>                            
                            <xs:element name="description" type="xs:string"/>
                            <xs:element name="date" type="xs:string"/>
                            <xs:element name="images" minOccurs="0">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="img"/>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>                            
                        </xs:sequence>
                        <xs:attribute name="cid" type="xs:string"/>
                        <xs:attribute name="donatedBy" type="xs:string"/>
                        <xs:attribute name="metadata" type="xs:string"/>
                        <xs:attribute name="src" type="xs:string"/>                        
                    </xs:complexType>
                </xs:element>                
            </xs:sequence>
        </xs:complexType>
    </xs:element>    
</xs:schema>

То, что я изменил, было:

  1. Элемент photoпроисходит более одного раза, поэтому я добавил maxOccurs="unbounded"
  2. Элемент name может иметь атрибут, поэтому я изменил его определение на complexType с simpleContent.
  3. . элемент images не должен возникать, поэтому я добавил minOccurs="0"
  4. Я переместил атрибуты из xs:sequence в xs:complexType

Теперь XSD долженпроверьте ваш XML.

...