2013-04-03 6 views
0

Я пытаюсь написать XSD документГде именно я ошибаюсь в этом XSD?

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:books" xmlns:bks="urn:books"> 
<xsd:element name="Books" type="bks:BooksForm"/> 
    <xsd:complexType name="BooksForm"> 
     <xsd:sequence> 
      <xsd:element name="Book" type="bks:BookForm" minOccurs="0"  maxOccurs="unbounded"/> 
     </xsd:sequence> 
    </xsd:complexType> 

    <xsd:complexType name="BookForm"> 
    <xsd:sequence> 
     <xsd:element name="Author" type="bks:AuthorForm" minOccurs="1" /><!--1--> 
     <xsd:element name="Isbn" type="xsd:string" minOccurs="1" /> 
     <xsd:element name="Title" type="xsd:string" minOccurs="1" /> 
     <xsd:element name="Publisher" type="xsd:string" minOccurs="1" /> 
     <xsd:element name="YearValue" type="bks:YearForm" minOccurs="1" /><!--2--> 
    </xsd:sequence> 
    <xsd:attribute name="Cover" type="xsd:string"/> 
    </xsd:complexType> 

    <xsd:complexType name="AuthorForm"> 
    <xsd:sequence> 
    <xsd:element name="Name" type="bks:NameForm"/><!--1--> 
     <xsd:element name="Contact" type="bks:ContactForm"/> <!--2--> 
    </xsd:sequence> 
    </xsd:complexType> 

    <xsd:complexType name="YearForm"> 
     <xsd:sequence> 
      <xsd:element name="Year" type="xsd:integer"/><!--1--> 
     </xsd:sequence> 
    <xsd:attribute name="Edition" type="xsd:integer"/> 
    </xsd:complexType> 

    <xsd:complexType name="NameForm"> 
    <xsd:sequence> 
    <xsd:element name="First" type="xsd:string"/><!--1--> 
     <xsd:element name="Last" type="xsd:string"/> <!--2--> 
    </xsd:sequence> 
    </xsd:complexType> 

    <xsd:complexType name="ContactForm"> 
    <xsd:sequence> 
    <xsd:element name="Phone" type="xsd:string"/><!--1--> 
    </xsd:sequence> 
    <xsd:attribute name="Office" type="xsd:string"/> 
    </xsd:complexType> 

</xsd:schema> 

, который соответствует следующему документу XML

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet type="text/xsl" href="Courses.xsl"?> 
<Books> 
    <Book Cover="Paper back"> 
    <Isbn>978-1-4652-0558-2</Isbn> 
    <Title>Service-Oriented Computing</Title> 
    <Author> 
     <Name> 
     <First>John</First> 
     <Last>Doe</Last> 
     </Name> 
     <Contact Office="BY400"> 
     <Phone>480-965 000</Phone> 
     </Contact> 
    </Author> 
    <Publisher>Kendall Hunt</Publisher> 
    <Year Edition="3"> 
     <Year>2012</Year> 
    </Year> 
    </Book> 
....</Books> 

Однако я получаю следующее сообщение об ошибке, когда я пытаюсь проверить его в Интернете

Line 3, 8 cvc-elt.1.a: Cannot find the declaration of element 'Books'. 

Но, насколько я вижу, Ive заявил об этом правильно. Может ли кто-нибудь указать, что я здесь делаю неправильно? Спасибо

+0

Можете ли вы добавить xsd, который определяет книги по этому вопросу? –

+0

Я не уверен, что я что-то упустил, как Im new для XML и XSD, но есть только один XSD и соответствующий XML. – KodeSeeker

ответ

2

Первая проблема на самом деле с этой линии: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:books" xmlns:bks="urn:books">

books не капитализируются здесь, как и везде в документе.

Вот более «полный» Исправление:

Я сделал несколько вещей. Во-первых, я удалил targetNamespace и xmlns:bks. Затем я переупорядочил некоторые элементы в типе BookForm, исправил YearValue как Year так же, как и в XML-данных. Затем я удалил все ссылки на bks. Теперь это подтверждается.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<xsd:element name="Books" type="BooksForm"/> 
    <xsd:complexType name="BooksForm"> 
     <xsd:sequence> 
      <xsd:element name="Book" type="BookForm" minOccurs="0"  maxOccurs="unbounded"/> 
     </xsd:sequence> 
    </xsd:complexType> 

    <xsd:complexType name="BookForm"> 
    <xsd:sequence> 
     <xsd:element name="Isbn" type="xsd:string" minOccurs="1" /> 
     <xsd:element name="Title" type="xsd:string" minOccurs="1" /> 
     <xsd:element name="Author" type="AuthorForm" minOccurs="1" /><!--1--> 
     <xsd:element name="Publisher" type="xsd:string" minOccurs="1" /> 
     <xsd:element name="Year" type="YearForm" minOccurs="1" /><!--2--> 
    </xsd:sequence> 
    <xsd:attribute name="Cover" type="xsd:string"/> 
    </xsd:complexType> 

    <xsd:complexType name="AuthorForm"> 
    <xsd:sequence> 
    <xsd:element name="Name" type="NameForm"/><!--1--> 
     <xsd:element name="Contact" type="ContactForm"/> <!--2--> 
    </xsd:sequence> 
    </xsd:complexType> 

    <xsd:complexType name="YearForm"> 
     <xsd:sequence> 
      <xsd:element name="Year" type="xsd:integer"/><!--1--> 
     </xsd:sequence> 
    <xsd:attribute name="Edition" type="xsd:integer"/> 
    </xsd:complexType> 

    <xsd:complexType name="NameForm"> 
    <xsd:sequence> 
    <xsd:element name="First" type="xsd:string"/><!--1--> 
     <xsd:element name="Last" type="xsd:string"/> <!--2--> 
    </xsd:sequence> 
    </xsd:complexType> 

    <xsd:complexType name="ContactForm"> 
    <xsd:sequence> 
    <xsd:element name="Phone" type="xsd:string"/><!--1--> 
    </xsd:sequence> 
    <xsd:attribute name="Office" type="xsd:string"/> 
    </xsd:complexType> 

</xsd:schema> 
+0

Если вы хотели изменить его на ' KodeSeeker

+0

@KodeSeeker: См. Обновление – NotMe

+0

Спасибо большое, это помогло! – KodeSeeker

1

Я написал для вас новый XSD; мы надеемся, что он соответствует вашим потребностям:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Books"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Book"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element type="xs:string" name="Isbn"/> 
       <xs:element type="xs:string" name="Title"/> 
       <xs:element name="Author"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element name="Name"> 
         <xs:complexType> 
         <xs:sequence> 
          <xs:element type="xs:string" name="First"/> 
          <xs:element type="xs:string" name="Last"/> 
         </xs:sequence> 
         </xs:complexType> 
        </xs:element> 
        <xs:element name="Contact"> 
         <xs:complexType> 
         <xs:sequence> 
          <xs:element type="xs:string" name="Phone"/> 
         </xs:sequence> 
         <xs:attribute type="xs:string" name="Office"/> 
         </xs:complexType> 
        </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
       <xs:element type="xs:string" name="Publisher"/> 
       <xs:element name="Year"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element type="xs:short" name="Year"/> 
        </xs:sequence> 
        <xs:attribute type="xs:byte" name="Edition"/> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      <xs:attribute type="xs:string" name="Cover"/> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 
+1

Возможно, лучший подход к переписыванию работы OPs будет объяснять, какова проблема с его схемой. В конце концов, вопрос заключался в просьбе указать, что случилось. Кажется, он хочет узнать что-то из опыта. – NotMe

+0

@ChrisLively честно, я не уверен. Я на работе, и у меня нет времени заглядывать в нее, но я могу с радостью дать ему то, что работает. – Codeman

+0

@ Pheonixblade9, сущность Книги должны содержать несколько экземпляров книги. Я не думаю, что ваш XSD поддерживает это – KodeSeeker

1

Я не вижу ничего плохого в вашем XSD, но с XML. В XMl отсутствует спецификация пространства имен. Следует читать: <Books xmlns="urn:books">

Смежные вопросы