Announcement

Collapse
No announcement yet.

Brauche Hilfe beim Erstellen eines Schemas erstellen.

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

  • Brauche Hilfe beim Erstellen eines Schemas erstellen.

    Hallo,

    Ich habe ein Problem. Ich habe eine XMLdatei und möchte diese in C# nun gegen ein Schema validieren, dazu erstelle ich seit Tagen eine XSD, aber irgendwie habe ich einen Fehler drin, den ich nicht sehe. Vielleicht könnte mir jemand von euch helfen.

    Bei der XMLdatei handelt es sich um eine macrosammlung mit der ich Tastatureingaben speichern möchte. Es gibt drei Befehle:
    - keydown
    - keyup
    - pause

    "keydown" und "keyup" dürften selbsterklärend sein. "pause" gibt eine Zeitspanne in Millisekunden an. Die Werte für "keyup" und "keydown" sind ENUMs. Es gibt einen Roottag "scripts" mit beliebig vielen "script"-tags. Jedes script hat eine eindeudige ID(GUID) und eine Beliebige Abfolge der drei Grundbefehle.

    XML:
    HTML Code:
    <?xml version="1.0" ?>
    <dkt:scripts xmlns:dkt="myns/">
    	<dkt:script id="0xA8FC3738372F11DD8A57FDC255D89593">
    		<dkt:keydown>D1</dkt:keydown>
    		<dkt:pause>1</dkt:pause>
    		<dkt:keyup>D1</dkt:keyup>
    	</dkt:script>
    	<dkt:script id="0xAE808E48372F11DD9F5929C355D89593">
    		<dkt:keydown>D1</dkt:keydown>
    		<dkt:pause>1</dkt:pause>
    		<dkt:keyup>D1</dkt:keyup>
    	</dkt:script>	
    </dkt:scripts>
    Hier ist meine XSD:
    HTML Code:
    <?xml version="1.0" encoding="utf-8"?>
    <xsd:schema xmlns="myns/" targetNamespace="myns/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    
     <xsd:element name="scripts" >
       <xsd:complexType>
         <xsd:choice>
          <xsd:element name="script" type="SCRIPT" minOccurs="0" maxOccurs="unbounded" />
         </xsd:choice>
         <xsd:attribute name="id" type="GUID" />
       </xsd:complexType >
     </xsd:element>
       
     <xsd:complexType name="SCRIPT" >
       <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element name="pause" 	type="xsd:nonNegativeInteger" />
          <xsd:element name="keydown" 	type="KEYS"		      />
          <xsd:element name="keyup" 	type="KEYS"		      />
       </xsd:choice>
     </xsd:complexType>
    
     <xsd:simpleType name="GUID">
       <xsd:restriction base="xsd:string">
            <xsd:pattern value="\{[a-fA-F0-9]{32}" />
       </xsd:restriction>
     </xsd:simpleType>
    
      <xsd:simpleType name="KEYS">
        <xsd:restriction base="xsd:string">
          <xsd:enumeration value="Esc" />
          <xsd:enumeration value="F1" />
          <xsd:enumeration value="F2" />
          <xsd:enumeration value="F3" />
          <xsd:enumeration value="F4" />
          <xsd:enumeration value="F5" />
          <xsd:enumeration value="F6" />
          <xsd:enumeration value="F7" />
          <xsd:enumeration value="F8" />
          <xsd:enumeration value="F9" />
          <xsd:enumeration value="F10" />
          <xsd:enumeration value="F11" />
          <xsd:enumeration value="F12" />
          <xsd:enumeration value="Zirkumflex" />
          <xsd:enumeration value="D1" />
          <xsd:enumeration value="D2" />
          <xsd:enumeration value="D3" />
          <xsd:enumeration value="D4" />
          <xsd:enumeration value="D5" />
          <xsd:enumeration value="D6" />
          <xsd:enumeration value="D7" />
          <xsd:enumeration value="D8" />
          <xsd:enumeration value="D9" />
          <xsd:enumeration value="D0" />
          <xsd:enumeration value="Sz" />
          <xsd:enumeration value="Akut" />
          <xsd:enumeration value="Backspace" />
          <xsd:enumeration value="Tab" />
          <xsd:enumeration value="Q" />
          <xsd:enumeration value="W" />
          <xsd:enumeration value="E" />
          <xsd:enumeration value="R" />
          <xsd:enumeration value="T" />
          <xsd:enumeration value="Z" />
          <xsd:enumeration value="U" />
          <xsd:enumeration value="I" />
          <xsd:enumeration value="O" />
          <xsd:enumeration value="P" />
          <xsd:enumeration value="Uuml" />
          <xsd:enumeration value="Add" />
          <xsd:enumeration value="Return" />
          <xsd:enumeration value="Capslock" />
          <xsd:enumeration value="A" />
          <xsd:enumeration value="S" />
          <xsd:enumeration value="D" />
          <xsd:enumeration value="F" />
          <xsd:enumeration value="G" />
          <xsd:enumeration value="H" />
          <xsd:enumeration value="K" />
          <xsd:enumeration value="L" />
          <xsd:enumeration value="Ouml" />
          <xsd:enumeration value="Auml" />
          <xsd:enumeration value="Raute" />
          <xsd:enumeration value="Lshift" />
          <xsd:enumeration value="Less" />
          <xsd:enumeration value="Y" />
          <xsd:enumeration value="X" />
          <xsd:enumeration value="C" />
          <xsd:enumeration value="V" />
          <xsd:enumeration value="B" />
          <xsd:enumeration value="N" />
          <xsd:enumeration value="M" />
          <xsd:enumeration value="Comma" />
          <xsd:enumeration value="Point" />
          <xsd:enumeration value="Subtract" />
          <xsd:enumeration value="Rshift" />
          <xsd:enumeration value="Lcontrol" />
          <xsd:enumeration value="Lwin" />
          <xsd:enumeration value="Lalt" />
          <xsd:enumeration value="Space" />
          <xsd:enumeration value="Altgr" />
          <xsd:enumeration value="Rwin" />
          <xsd:enumeration value="Application" />
          <xsd:enumeration value="Rcontrol" />
          <xsd:enumeration value="Print" />
          <xsd:enumeration value="Roll" />
          <xsd:enumeration value="Pause" />
          <xsd:enumeration value="Insert" />
          <xsd:enumeration value="Home" />
          <xsd:enumeration value="Pakeup" />
          <xsd:enumeration value="Del" />
          <xsd:enumeration value="End" />
          <xsd:enumeration value="Pagedown" />
          <xsd:enumeration value="Left" />
          <xsd:enumeration value="Up" />
          <xsd:enumeration value="Right" />
          <xsd:enumeration value="Down" />
          <xsd:enumeration value="NumLock" />
          <xsd:enumeration value="NumDivide" />
          <xsd:enumeration value="NumMultiply" />
          <xsd:enumeration value="NumSubtract" />
          <xsd:enumeration value="Num7" />
          <xsd:enumeration value="Num8" />
          <xsd:enumeration value="Num9" />
          <xsd:enumeration value="NumAdd" />
          <xsd:enumeration value="Num4" />
          <xsd:enumeration value="Num5" />
          <xsd:enumeration value="Num6" />
          <xsd:enumeration value="Num1" />
          <xsd:enumeration value="Num2" />
          <xsd:enumeration value="Num3" />
          <xsd:enumeration value="Numenter" />
          <xsd:enumeration value="Num0" />
          <xsd:enumeration value="Numdecimal" />
        </xsd:restriction>
      </xsd:simpleType>
      
    </xsd:schema>
    Für mein Verständnis dürfte alles richtig sein, aber leider ist dem nicht so. Wenn ich die Instanz validiere, bekomme ich folgende Fehlermeldung:

    HTML Code:
    Line: 3 - Position: 3 - The element 'scripts' in namespace 'myns/' has invalid child element 'script' in namespace 'myns/'. List of possible elements expected: 'script'.
    Ich bin echt für jeden Hinweis dankbar!


    Darüber hinaus habe ich noch eine Frage. Soweit ich weiss, ist die Reihenfolge der Tags auf einer Ebene nach den XML-Regeln nicht von Belang. Das wiederspricht jedoch meinen Scripts, denn die einzelnen Befehle haben ja eine Ordnung. Gibt es da ein Kommando, das ich in die Instanz einfügen kann, um einem Verarbeitenden Programm zu sagen, dass im Script-tag die Order eine Rolle spielt?

    lg,

    misch

  • #2
    Hallo Alex,

    Du musst, wenn Du die Script element mit Namespace ansprechen willst in der Schemadeklaration "elementFormDefault="qualified" " einfügen. Ausserdem hast Du das id Attribut nicht auf Script Ebene, sondern auf Scripts Ebene definiert.

    <?xml version="1.0" encoding="utf-8"?>
    <xsd:schema xmlns="myns/" targetNamespace="myns/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified">

    <xsd:element name="scripts">
    <xsd:complexType>
    <xsd:choice>
    <xsd:element name="script" type="SCRIPT" minOccurs="0" maxOccurs="unbounded" />
    </xsd:choice>
    </xsd:complexType >
    </xsd:element>

    <xsd:complexType name="SCRIPT" >
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
    <xsd:element name="pause" type="xsd:nonNegativeInteger" />
    <xsd:element name="keydown" type="KEYS" />
    <xsd:element name="keyup" type="KEYS" />
    </xsd:choice>
    <xsd:attribute name="id" type="GUID" />
    </xsd:complexType>

    <xsd:simpleType name="GUID">
    <xsd:restriction base="xsd:string">
    <xsdattern value="\{[a-fA-F0-9]{32}" />
    </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="KEYS">
    <xsd:restriction base="xsd:string">
    <xsd:enumeration value="Esc" />
    <xsd:enumeration value="F1" />
    <xsd:enumeration value="F2" />
    <xsd:enumeration value="F3" />
    <xsd:enumeration value="F4" />
    <xsd:enumeration value="F5" />
    <xsd:enumeration value="F6" />
    <xsd:enumeration value="F7" />
    <xsd:enumeration value="F8" />
    <xsd:enumeration value="F9" />
    <xsd:enumeration value="F10" />
    <xsd:enumeration value="F11" />
    <xsd:enumeration value="F12" />
    <xsd:enumeration value="Zirkumflex" />
    <xsd:enumeration value="D1" />
    <xsd:enumeration value="D2" />
    <xsd:enumeration value="D3" />
    <xsd:enumeration value="D4" />
    <xsd:enumeration value="D5" />
    <xsd:enumeration value="D6" />
    <xsd:enumeration value="D7" />
    <xsd:enumeration value="D8" />
    <xsd:enumeration value="D9" />
    <xsd:enumeration value="D0" />
    <xsd:enumeration value="Sz" />
    <xsd:enumeration value="Akut" />
    <xsd:enumeration value="Backspace" />
    <xsd:enumeration value="Tab" />
    <xsd:enumeration value="Q" />
    <xsd:enumeration value="W" />
    <xsd:enumeration value="E" />
    <xsd:enumeration value="R" />
    <xsd:enumeration value="T" />
    <xsd:enumeration value="Z" />
    <xsd:enumeration value="U" />
    <xsd:enumeration value="I" />
    <xsd:enumeration value="O" />
    <xsd:enumeration value="P" />
    <xsd:enumeration value="Uuml" />
    <xsd:enumeration value="Add" />
    <xsd:enumeration value="Return" />
    <xsd:enumeration value="Capslock" />
    <xsd:enumeration value="A" />
    <xsd:enumeration value="S" />
    <xsd:enumeration value="D" />
    <xsd:enumeration value="F" />
    <xsd:enumeration value="G" />
    <xsd:enumeration value="H" />
    <xsd:enumeration value="K" />
    <xsd:enumeration value="L" />
    <xsd:enumeration value="Ouml" />
    <xsd:enumeration value="Auml" />
    <xsd:enumeration value="Raute" />
    <xsd:enumeration value="Lshift" />
    <xsd:enumeration value="Less" />
    <xsd:enumeration value="Y" />
    <xsd:enumeration value="X" />
    <xsd:enumeration value="C" />
    <xsd:enumeration value="V" />
    <xsd:enumeration value="B" />
    <xsd:enumeration value="N" />
    <xsd:enumeration value="M" />
    <xsd:enumeration value="Comma" />
    <xsd:enumeration value="Point" />
    <xsd:enumeration value="Subtract" />
    <xsd:enumeration value="Rshift" />
    <xsd:enumeration value="Lcontrol" />
    <xsd:enumeration value="Lwin" />
    <xsd:enumeration value="Lalt" />
    <xsd:enumeration value="Space" />
    <xsd:enumeration value="Altgr" />
    <xsd:enumeration value="Rwin" />
    <xsd:enumeration value="Application" />
    <xsd:enumeration value="Rcontrol" />
    <xsd:enumeration value="Print" />
    <xsd:enumeration value="Roll" />
    <xsd:enumeration value="Pause" />
    <xsd:enumeration value="Insert" />
    <xsd:enumeration value="Home" />
    <xsd:enumeration value="Pakeup" />
    <xsd:enumeration value="Del" />
    <xsd:enumeration value="End" />
    <xsd:enumeration value="Pagedown" />
    <xsd:enumeration value="Left" />
    <xsd:enumeration value="Up" />
    <xsd:enumeration value="Right" />
    <xsd:enumeration value="Down" />
    <xsd:enumeration value="NumLock" />
    <xsd:enumeration value="NumDivide" />
    <xsd:enumeration value="NumMultiply" />
    <xsd:enumeration value="NumSubtract" />
    <xsd:enumeration value="Num7" />
    <xsd:enumeration value="Num8" />
    <xsd:enumeration value="Num9" />
    <xsd:enumeration value="NumAdd" />
    <xsd:enumeration value="Num4" />
    <xsd:enumeration value="Num5" />
    <xsd:enumeration value="Num6" />
    <xsd:enumeration value="Num1" />
    <xsd:enumeration value="Num2" />
    <xsd:enumeration value="Num3" />
    <xsd:enumeration value="Numenter" />
    <xsd:enumeration value="Num0" />
    <xsd:enumeration value="Numdecimal" />
    </xsd:restriction>
    </xsd:simpleType>

    </xsd:schema>

    Comment


    • #3
      Hi Moartl17!

      Danke für den Hinweis.

      misch

      Comment

      Working...
      X