Announcement

Collapse
No announcement yet.

Elementdefinition in xsd-Dateien

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Elementdefinition in xsd-Dateien

    Hallo Leute,

    ich habe ein Paar fragen zur xsd-Datei. Erstmal erkläre ich kurz worum es geht. Also, in unserem geometrie-prog speichern wir Zeichenelemente in xml-dateien ab: z.B. Name, Typ (Punkt, Linie, Kugel etc.), Farbe, Parameter usw... Mit der dazugehörigen xsd-Datei soll dann beim Parsen diese Datei auf wohlgeformtheiit geprüft werden. ok...
    1). Man hat zwei Arten von Parametern: double und string (z.B Punkt hat x, y, z-Koordinaten, Linie hingegen punkt1 und punkt2), die man am Attribut "element" unterscheiden kann. Wie definiere ich ein Element so dass, wenn "element"=true, dann muss Element ein string sein, sonst double? Ich weiß dass ein Element zwei verschiedene Typen nicht haben darf. Kann mir da jemand weiter helfen?

    ... hierzu Codeausschnitt für eine Linie:
    Code:
     <?xml version="1.0" encoding="iso-8859-1" ?> 
    ...
     <parameter>
      <p element="false">-5.510436302599336E-14</p> 
      <p element="false">5.510436302599336E-14</p> 
      <p element="true">PointFree_2</p> 
      </parameter>
    ...
    ...
    2). ... hoffentlich wird das nicht zu viel fürs erste Mal.
    Farben enthalten zwei Subelemente: elementfarbe und textfarbe, die die gleiche Struktur haben und nur im Tagnamen untersceiden.

    Code:
     <?xml version="1.0" encoding="iso-8859-1" ?> 
    ...
    
     <farbe>
     <elementfarbe>
      <r>0</r> 
      <g>0</g> 
      <b>255</b> 
      <transparenz>255</transparenz> 
      </elementfarbe>
     <textfarbe>
      <r>0</r> 
      <g>0</g> 
      <b>255</b> 
      <transparenz>255</transparenz> 
      </textfarbe>
      </farbe>
    
    ...
    ich kann natürlich stur jedes ELement definieren... nämlich so
    Code:
    <xs:element name="farbe">
               <xs:complexType>
                  <xs:sequence>
    	   <xs:element name="elementfarbe">
    	      <xs:complexType mixed="false">
                           <xs:sequence>
    		<xs:element name="r" minOccurs="0" maxOccurs="255" type="xs:integer"/>
    		<xs:element name="g" minOccurs="0" maxOccurs="255" type="xs:integer"/>
    		<xs:element name="b" minOccurs="0" maxOccurs="255" type="xs:integer"/>
    		<xs:element name="transparenz" minOccurs="0" maxOccurs="255" type="xs:integer"/>
    	         </xs:sequence>
                        </xs:complexType>
    	   </xs:element>
    	   <xs:element name="textfarbe">
    	      <xs:complexType mixed="false">
                           <xs:sequence>
    		<xs:element name="r" minOccurs="0" maxOccurs="255" type="xs:integer"/>
    		<xs:element name="g" minOccurs="0" maxOccurs="255" type="xs:integer"/>
    		<xs:element name="b" minOccurs="0" maxOccurs="255" type="xs:integer"/>
    		<xs:element name="transparenz" minOccurs="0" maxOccurs="255" type="xs:integer"/>
    	         </xs:sequence>
                        </xs:complexType>
    	   </xs:element>
                  </xs:sequence>
               </xs:complexType>
            </xs:element>
    ... würde gerne aber das elleganter lösen,weiß nur nicht wie.

  • #2
    also, Lösung fürs zweite Problem hab ich gefunden... man definiert halt belibig viele Elemente mit verschidenen Name vom gleichen Typ.
    Code:
    <xs:element name="elementfarbe" type="color" />
    <xs:element name="textfarbe" type="color" />
    ...
    ...
    <xs:complexType mixed="false" name="color">
       <xs:sequence>
          <xs:element name="r" minOccurs="0" maxOccurs="255" type="xs:integer"/>
          <xs:element name="g" minOccurs="0" maxOccurs="255" type="xs:integer"/>
          <xs:element name="b" minOccurs="0" maxOccurs="255" type="xs:integer"/>
          <xs:element name="transparenz" minOccurs="0" maxOccurs="255" type="xs:integer"/>
       </xs:sequence>
    </xs:complexType>

    Comment

    Working...
    X