2012-11-16 8 views
8

Ich habe zwei komplexe Elementtypen definiert - Entwickler und App.Wie definiere ich einen benutzerdefinierten Datentyp im XML-Schema?

Entwickler Childs - ID, Name, E-Mail

App Childs - ID, Name, Entwickler

Hier ist der Entwickler in App komplexes Element bezieht sich auf Entwickler/ID.

So definieren Sie diese Beziehung im XML-Schema. Ich benutze XML Spion2013 Editor.

Ich habe versucht, Namen in der Erklärung der einfachen Art Entwickler-> ID angeben. Und diesen Namen im App-> Developer-Datentyp verwenden. Aber es gibt Fehler ..

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

Ich weiß nicht, wer diese Frage upvoted oder warum, aber ich bin es Downvoting. Wenn Sie einen Code schreiben und uns einen Fehler geben, sollten Sie uns den Code, den Sie geschrieben haben, und den Fehler, den er gab, zeigen, dann können wir sehen, wo Sie falsch gelaufen sind. Sie müssen nicht erschrocken oder peinlich sein, wenn Sie Ihre Programmierversuche zeigen. Der beste Weg zu lernen besteht darin, Ihre Bemühungen einer kritischen Überprüfung durch Personen mit mehr Erfahrung mit der Technologie, die Sie lernen, zu unterziehen. –

Antwort

10

Die Art und Weise, eine gemeinsame einfache Art für die Entwickler-ID zu verwenden, ist es als benannte Typ am Anfang zu erklären:

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

    . . . 

und dann verwenden sie es:

. . . 
    <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"/> 

Aber das ist nicht genug, um ein Constraint zu schaffen, so dass appinfo/App/Developer ca n enthalten nur einen der Entwickler-IDs, die in appinfo/Developer/ID deklariert sind. Dazu müssen Sie eine eindeutige Schlüsseldefinition unter Verwendung von xs:key erstellen und sie mit xs:keyref referenzieren (siehe here).

Dies ist die komplette XSD:

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