2012-11-16 13 views
8

Ho definito due tipi di elementi complessi: Developer e App.Come definire un utente definisce il tipo di dati nello schema XML?

sviluppatori Childs - Codice, Nome, Email

App Childs - ID, Nome, Developer

Qui il Developer in App elemento complesso si riferisce alla Developer/ID.

Come definire questa relazione nello schema xml. Sto usando l'editor XML spy2013.

ho cercato specificando nome nella dichiarazione di tipo semplice Developer-> ID. E usando questo nome in App-> Tipo di dati dello sviluppatore. Ma dà l'errore ..

<?xml version="1.0" encoding="UTF-8"?> 
<!-- edited with XMLSpy v2013 (x64) (http://www.altova.com) by Piyush (USC) --> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"   attributeFormDefault="unqualified"> 
<xs:element name="appinfo"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="Developer"> 
       <xs:complexType> 
        <xs:all> 
         **<xs:element name="ID">** 
          <xs:simpleType> 
           <xs:restriction base="xs:string"> 
            <xs:length value="5"/> 
            <xs:pattern value="[a-zA-Z][a-zA-Z][0-9][0-9][a-zA-Z]"/> 
           </xs:restriction> 
          </xs:simpleType> 
         </xs:element> 
         <xs:element name="Name"> 
          <xs:simpleType> 
           <xs:restriction base="xs:string"> 
            <xs:pattern value="([a-zA-Z])+"/> 
           </xs:restriction> 
          </xs:simpleType> 
         </xs:element> 
         <xs:element name="Email"> 
          <xs:simpleType> 
           <xs:restriction base="xs:string"> 
            <xs:pattern value="[^@][email protected][^\.]+\..+"/> 
           </xs:restriction> 
          </xs:simpleType> 
         </xs:element> 
         <xs:element name="Company" type="xs:string"/> 
         <xs:element name="Website" type="xs:string"/> 
         <xs:element name="Phone"> 
          <xs:simpleType> 
           <xs:restriction base="xs:string"> 
            <xs:length value="13"/> 
           </xs:restriction> 
          </xs:simpleType> 
         </xs:element> 
        </xs:all> 
       </xs:complexType> 
      </xs:element> 
      <xs:element name="App"> 
       <xs:complexType> 
        <xs:all> 
         <xs:element name="ID"> 
          <xs:simpleType> 
           <xs:restriction base="xs:string"> 
            <xs:length value="5"/> 
            <xs:pattern value="[0-9][0-9][0-9][0-9][A-Z]"/> 
           </xs:restriction> 
          </xs:simpleType> 
         </xs:element> 
         <xs:element name="Name"> 
          <xs:simpleType> 
           <xs:restriction base="xs:string"> 
            <xs:pattern value="([a-zA-Z])+"/> 
           </xs:restriction> 
          </xs:simpleType> 
         </xs:element> 
         <xs:element name="Developer" ***type="xs:anySimpleType"/>*** 
         <xs:element name="Price"> 
          <xs:simpleType> 
           <xs:restriction base="xs:float"> 
            <xs:minInclusive value="0.00"/> 
            <xs:maxInclusive value="6.99"/> 
           </xs:restriction> 
          </xs:simpleType> 
         </xs:element> 
         <xs:element name="TabletCompatible" type="xs:boolean" minOccurs="0"/> 
         <xs:element name="Category"> 
          <xs:simpleType> 
           <xs:restriction base="xs:string"> 
            <xs:enumeration value="Travel"/> 
            <xs:enumeration value="Productivity"/> 
            <xs:enumeration value="Game"/> 
            <xs:enumeration value="Music"/> 
            <xs:enumeration value="Education"/> 
            <xs:enumeration value="Lifestyle"/> 
           </xs:restriction> 
          </xs:simpleType> 
         </xs:element> 
         <xs:element name="Platform"> 
          <xs:simpleType> 
           <xs:restriction base="xs:string"> 
            <xs:enumeration value="Android"/> 
            <xs:enumeration value="iOS"/> 
            <xs:enumeration value="Blackberry"/> 
           </xs:restriction> 
          </xs:simpleType> 
         </xs:element> 
        </xs:all> 
       </xs:complexType> 
      </xs:element> 
      <xs:element name="AppStat"> 
       <xs:complexType> 
        <xs:all> 
         <xs:element name="AppID" type="xs:anySimpleType"/> 
         <xs:element name="Statistics"> 
          <xs:complexType> 
           <xs:sequence maxOccurs="unbounded"> 
            <xs:element name="Platform" type="xs:anySimpleType"/> 
            <xs:element name="Downloads" type="xs:positiveInteger"/> 
            <xs:element name="Rating"> 
             <xs:simpleType> 
              <xs:restriction base="xs:float"> 
               <xs:minInclusive value="0.0"/> 
               <xs:maxInclusive value="5.0"/> 
              </xs:restriction> 
             </xs:simpleType> 
            </xs:element> 
           </xs:sequence> 
          </xs:complexType> 
         </xs:element> 
         <xs:element name="LastChecked" type="xs:date"/> 
        </xs:all> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

+0

Io non so chi upvoted questa domanda o perché, ma mi sto downvoting esso. Se scrivi del codice e ci dà un errore, dovresti mostrarci il codice che hai scritto e l'errore che ha dato, quindi possiamo vedere dove hai sbagliato. Non devi essere spaventato o imbarazzato nel mostrare i tuoi tentativi di codifica; il modo migliore per imparare è sottoporre i tuoi sforzi a una revisione critica da parte di persone con più esperienza della tecnologia che stai imparando. –

risposta

10

Il modo di utilizzare un tipo semplice comune per l'id sviluppatore è di dichiararla come un tipo di nome all'inizio:

<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    elementFormDefault="qualified"   
    attributeFormDefault="unqualified"> 

    <xs:simpleType name="developerID"> 
    <xs:restriction base="xs:string"> 
     <xs:length value="5"/> 
     <xs:pattern value="[a-zA-Z][a-zA-Z][0-9][0-9][a-zA-Z]"/> 
    </xs:restriction> 
    </xs:simpleType> 

    . . . 

e poi usarlo:

. . . 
    <xs:element name="Developer" maxOccurs="unbounded"> 
     <xs:complexType> 
     <xs:all> 
      <xs:element name="ID" type="developerID"> 
. . . 
    <xs:element name="App" maxOccurs="unbounded"> 
     <xs:complexType> 
     <xs:all> 
      . . . 
      <xs:element name="Developer" type="developerID"/> 

Ma questo non è sufficiente per creare un contraint in modo che appinfo/App/Developer ca n contiene solo uno degli ID degli sviluppatori dichiarati in appinfo/Developer/ID. Per fare ciò è necessario creare una definizione di chiave univoca usando xs:key e riferirla usando xs:keyref (vedere here).

Ecco la XSD completo:

<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    elementFormDefault="qualified"   
    attributeFormDefault="unqualified"> 

    <xs:simpleType name="developerID"> 
    <xs:restriction base="xs:string"> 
     <xs:length value="5"/> 
     <xs:pattern value="[a-zA-Z][a-zA-Z][0-9][0-9][a-zA-Z]"/> 
    </xs:restriction> 
    </xs:simpleType> 

    <xs:element name="appinfo"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Developer" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:all> 
       <xs:element name="ID" type="developerID"> 
       </xs:element> 
       <xs:element name="Name"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
        <xs:pattern value="([a-zA-Z])+"/> 
        </xs:restriction> 
       </xs:simpleType> 
       </xs:element> 
       <xs:element name="Email"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
        <xs:pattern value="[^@][email protected][^\.]+\..+"/> 
        </xs:restriction> 
       </xs:simpleType> 
       </xs:element> 
       <xs:element name="Company" type="xs:string"/> 
       <xs:element name="Website" type="xs:string"/> 
       <xs:element name="Phone"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
        <xs:length value="13"/> 
        </xs:restriction> 
       </xs:simpleType> 
       </xs:element> 
      </xs:all> 
      </xs:complexType> 
     </xs:element> 
     <xs:element name="App" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:all> 
       <xs:element name="ID"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
        <xs:length value="5"/> 
        <xs:pattern value="[0-9][0-9][0-9][0-9][A-Z]"/> 
        </xs:restriction> 
       </xs:simpleType> 
       </xs:element> 
       <xs:element name="Name"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
        <xs:pattern value="([a-zA-Z])+"/> 
        </xs:restriction> 
       </xs:simpleType> 
       </xs:element> 
       <xs:element name="Developer" type="developerID"/> 
       <xs:element name="Price"> 
       <xs:simpleType> 
        <xs:restriction base="xs:float"> 
        <xs:minInclusive value="0.00"/> 
        <xs:maxInclusive value="6.99"/> 
        </xs:restriction> 
       </xs:simpleType> 
       </xs:element> 
       <xs:element name="TabletCompatible" type="xs:boolean" minOccurs="0"/> 
       <xs:element name="Category"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
        <xs:enumeration value="Travel"/> 
        <xs:enumeration value="Productivity"/> 
        <xs:enumeration value="Game"/> 
        <xs:enumeration value="Music"/> 
        <xs:enumeration value="Education"/> 
        <xs:enumeration value="Lifestyle"/> 
        </xs:restriction> 
       </xs:simpleType> 
       </xs:element> 
       <xs:element name="Platform"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
        <xs:enumeration value="Android"/> 
        <xs:enumeration value="iOS"/> 
        <xs:enumeration value="Blackberry"/> 
        </xs:restriction> 
       </xs:simpleType> 
       </xs:element> 
      </xs:all> 
      </xs:complexType> 
      <xs:keyref name="developerIDref" refer="developerID"> 
      <xs:selector xpath="."/> 
      <xs:field xpath="Developer"/> 
      </xs:keyref> 
     </xs:element> 
     <xs:element name="AppStat"> 
      <xs:complexType> 
      <xs:all> 
       <xs:element name="AppID" type="xs:anySimpleType"/> 
       <xs:element name="Statistics"> 
       <xs:complexType> 
        <xs:sequence maxOccurs="unbounded"> 
        <xs:element name="Platform" type="xs:anySimpleType"/> 
        <xs:element name="Downloads" type="xs:positiveInteger"/> 
        <xs:element name="Rating"> 
         <xs:simpleType> 
         <xs:restriction base="xs:float"> 
          <xs:minInclusive value="0.0"/> 
          <xs:maxInclusive value="5.0"/> 
         </xs:restriction> 
         </xs:simpleType> 
        </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
       <xs:element name="LastChecked" type="xs:date"/> 
      </xs:all> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:key name="developerID"> 
     <xs:selector xpath="Developer"/> 
     <xs:field xpath="ID"/> 
    </xs:key> 
    </xs:element> 

</xs:schema> 
Problemi correlati