2017-08-10 30 views
1

我遇到了问题,我的xsd文件不知道我错过了什么,因为它没有验证。试图使书本id成为书籍的一个属性,并且作者姓名和姓氏被封装在作者元素中,以便可以使用多个作者书籍。如何为书设计XML模式?

<ArrayOfBook> 
    <Book id="cb001"> 
     <Author> 
     <Initials>Charles</Initials> 
     <Surname>Berlitz</Surname> 
     </Author> 
     <Title>The Bermuda Triangle</Title> 
    </Book> 
    <Book id="da001"> 
     <Author> 
     <Initials>Douglas</Initials> 
     <Surname>Adams</Surname> 
     </Author> 
     <Title>The Hitchhiker's Guide to the Galaxy</Title> 
    </Book> 
    <Book id="bor001"> 
     <Author> 
     <Initials>Bill</Initials> 
     <Surname>O'Reilly</Surname> 
     </Author> 
     <Author> 
     <Initials>Dwight Jon</Initials> 
     <Surname>Zimmerman</Surname> 
     </Author> 
     <Title>Lincoln's Last Days</Title> 
    </Book> 
</ArrayOfBook> 

我在下面的XSD中错过了什么?当我尝试验证“作者的内容必须匹配”(注释?,(simpleType | ComplexType)?,(unique | Key | Keyref)*))时,给我一个错误。

<?xml version = "1.0" ?> 
    <xs:schema id = "ArrayOfBook" xmlns:xs ="http://www.w3.org/2001/XMLSchema"> 

    <xs:simpleType name = "AuthorId"> 
     <xs:restriction base = "xs:string"> 
     <xs:pattern value ="[A-Za-z\s']+"/> 
     </xs:restriction> 
    </xs:simpleType> 

    <xs:element name = "ArrayOfBook"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name = "Book" minOccurs = "0" maxOccurs = "unbounded"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name = "Author"> 
        <xs:element name="AuthorInitials" type="AuthorId" minOccurs ="1" maxOccurs = "unbounded"/> 
        <xs:element name="AuthorSurname" type="AuthorId" minOccurs ="1" maxOccurs = "unbounded"/> 
        </xs:element> 
        <xs:attribute name="Id" type = "xs:string"/> 
        <xs:element name="Title" type="xs:string"/> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:schema> 

回答

0

您必须使用以下XSD来验证您的XML。

<?xml version = "1.0" ?> 
<xs:schema id="ArrayOfBook" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:simpleType name="AuthorId"> 
     <xs:restriction base="xs:string"> 
      <xs:pattern value="[A-Za-z\s']+"/> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:element name="ArrayOfBook"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Book" minOccurs="0" maxOccurs="unbounded"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="Author" minOccurs="0" maxOccurs="unbounded"> 
           <xs:complexType> 
            <xs:sequence> 
             <xs:element name="Initials" type="AuthorId" minOccurs="1" 
              maxOccurs="unbounded"/> 
             <xs:element name="Surname" type="AuthorId" minOccurs="1" 
              maxOccurs="unbounded"/> 
            </xs:sequence> 
           </xs:complexType> 
          </xs:element> 
          <xs:element name="Title" type="xs:string"/> 
         </xs:sequence> 
         <xs:attribute name="id" type="xs:string"/> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema>