如何在包含嵌套子元素序列的xsd中声明一个photo元素?

问题描述 投票:0回答:2

所以我一直在xsd文件中为我的照片元素得到这个错误,它说“s4s-elt-must-match.1:'catalog'的内容必须匹配(注释?,(simpleType | complexType)?,(unique | key | keyref)*))。从:element开始发现一个问题。“

<?xml version="1.0" encoding="UTF-8" ?>

    <!--
       New Perspectives on XML
       Tutorial 3
       Case Problem 1

       Catalog of photos from the Our Lady of Bergen Historical Society
       Author: Joshua Carpentier
       Date:   2/20/19

       Filename:         catalog.xsd
       Supporting Files: catalog.xml
    -->      
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:simpleType name="cidType " > 
    <xs:restriction base ="xs:ID"> 
    <xs:pattern value= "c\d{4}" /> 
    </xs:restriction> 
    </xs:simpleType > 

    <xs:simpleType name="srcType" > 
    <xs:restriction base ="xs:string"> 
    <xs:pattern value= "[a-zA-Z0-9]+.jpg" /> 
    </xs:restriction> 
    </xs:simpleType > 

    <xs:element name="catalog">`enter code here`
     <xs:element name="photo" minOccurs="1" maxOccurs="unbounded">


    <xs:complexType > 
     <xs:sequence>
     <xs:element ref="name" type="string" />
     <xs:element ref="description" type="string" />
     <xs:element ref="date" type="string" />
     <xs:element ref="images" type="string" />
     </xs:sequence>
    </xs:complexType> 


    <xs:attribute ref="cid" use="required"/>
    <xs:attribute ref="metadata" />
    <xs:attribute ref="donatedBy" use="optional" type="string" />
    </xs:element>

    <xs:element name="img" use="required" src=".jpg" />
    <xs:element ref="metadata" type="string" />
    <xs:element ref="cid"  type="cidType" />
    <xs:element ref="src"  type="srcType" />


</xs:schema>



**im trying to achieve this

声明包含以下嵌套子元素序列的photo元素 - 名称,描述,日期和图像。为嵌套元素设置以下属性:所有子元素都应包含字符串数据。 name元素还应该支持元数据属性。湾cid属性是必需的。 donatedBy属性是可选的。

**

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!--
   New Perspectives on XML
   Tutorial 3
   Case Problem 1

   Catalog of photos from the Our Lady of Bergen Historical Society
   Author: Joshua Carpentier
   Date:   2/20/19

   Filename:         catalog.xml
   Supporting Files: catalog.xsd
-->


    <catalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="catalog.xsd">

       <photo cid="c1748" donatedBy="John Borelli">
          <name metadata="tunis cooper property museum">Tunis R. Cooper property</name>
          <description>
          <![CDATA[ 
             This photo was taken by John Borelli's great-grandfather. It is believed to have been taken around 1830.
             David Demarest originally purchased the site of the chair factory in 1663. This site was under the ownership of the Demarest family until 1758.  The property is listed in the National and New Jersey Registers of Historic Places.
          ]]>
          </description>
          <date>circa 1830</date>
          <images>
             <img src="1748a.jpg" />
             <img src="1748b.jpg" />
          </images>
       </photo>

       <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>


       <photo cid="c2003" donatedBy="Linda Choo">
          <name metadata="bergenfield elementary school">Bergenfield School</name>
          <description>
          <![CDATA[ 
             The No. 5 Public School, a.k.a. Bergenfield School
          ]]>
          </description>
          <date>circa 1920</date>
          <images>
             <img src="2003a.jpg" />
             <img src="2003b.jpg" />
          </images>
       </photo>

       <photo cid="c2078" donatedBy="Maria Giodelli">
          <name metadata="coopers pond water">Coopers Pond</name>
          <description>
          <![CDATA[ 
             A favorite spot where we used to go hang out as kids.  The picture shows my brothers Robert and Michael.
          ]]>
          </description>
          <date>May 4, 1941</date>
          <images>
             <img src="2078a.jpg" />
          </images>
       </photo>

       <photo cid="c2079" donatedBy="Linda Uffington">
          <name metadata="watch timekeeping pocket railway">Pocket Watch</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 1870</date>
          <images>
             <img src="2079a.jpg" />
             <img src="2079b.jpg" />
          </images>
       </photo>

       <photo cid="c3233">
          <name metadata="hotel">Bergenfield Hotel</name>
          <description>
          <![CDATA[ 
             The Knollfield Hotel was known as the Bergenfield Hotel.  The property is listed in the 
             National and New Jersey Registers of Historic Places.
          ]]>
          </description>
          <date>circa 1920</date>
       </photo>

       <photo cid="c3433">
          <name metadata="sweeney coal fuel">Sweeney Coal</name>
          <description>
          <![CDATA[ 
             Sweeney Fuel Company located near New Bridge Road and railroad tracks.
          ]]>
          </description>
          <date>1920</date>
          <images>
             <img src="3433a.jpg" />
             <img src="3433b.jpg" />
             <img src="3433c.jpg" />
          </images>
       </photo>

</catalog>
xml xsd
2个回答
0
投票

一个xs:element元素作为一个孩子不能有另一个xs:element元素。通常xs:element作为一个孩子有xs:complexType,它本身就像孩子一样有xs:sequence,而孩子则有xs:element


0
投票

您的XSD文件无效。它没有良好的形式。要更正它,请使用结束标记完成元素。所以更换

<xs:element name="catalog">`enter code here`
  <xs:element name="photo" minOccurs="1" maxOccurs="unbounded">
  ...
</xs:element>

<xs:element name="catalog">
    <xs:element name="photo" minOccurs="1" maxOccurs="unbounded">
      <xs:complexType>
        <xs:sequence>
          <xs:element ref="name" type="string"/>
          <xs:element ref="description" type="string"/>
          <xs:element ref="date" type="string"/>
          <xs:element ref="images" type="string"/>
        </xs:sequence>
      </xs:complexType>
      <xs:attribute ref="cid" use="required"/>
      <xs:attribute ref="metadata"/>
      <xs:attribute ref="donatedBy" use="optional" type="string"/>
    </xs:element>
    <xs:element name="img" use="required" src=".jpg"/>
    <xs:element ref="metadata" type="string"/>
    <xs:element ref="cid" type="cidType"/>
    <xs:element ref="src" type="srcType"/>
</xs:element>

现在您的XSD将验证您的XML。

© www.soinside.com 2019 - 2024. All rights reserved.