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

时间:2019-02-26 18:58:03

标签: xml xsd

  

因此,对于我的photos元素,我在xsd文件中不断收到此错误,它说“ s4s-elt-must-match.1:'catalog'的内容必须匹配(注释?,(simpleType | complexType)?、唯一|键| 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

声明包含以下嵌套子元素序列的照片元素-名称, 说明,日期和图像。为嵌套元素设置以下属性: 一种。所有子元素都应包含字符串数据。名称元素也应支持 元数据属性。 b。 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>

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

一个id hobby 1 dance 1 sing 2 play 2 sing 元素不能有另一个id hobby 1 dance,sing 2 play,sing 元素作为子元素。通常,xs:elementxs:element作为孩子,而其本身以xs:element作为孩子,而xs:complexType作为孩子。

相关问题