André Laugks: XML-Schema: <xs:attribute/> am Ende des komlexen Typs

Hallo!

Ich habe folgende Elementen- und Attribute-Konstelation gegeben:

<datensatz attr="inhalt">
  <name>André</name>
</datensatz>

Das XML-Schema sieht dann folgendermaßen aus:

<xs:element name="datensatz">
  xs:complexType
    xs:sequence
      <xs:element name="name" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="attr" type="xs:string"/>
  </xs:complexType>
</xs:element>

Wieso muß man eigentlich xs:attribute/ am Ende des complexen Typs angeben?

MfG, André Laugks

--
L-Andre @ gmx.de\n
  1. Halihallo André

    Wieso muß man eigentlich xs:attribute/ am Ende des complexen Typs angeben?

    Nicht nur im komplexen Typ, auch bei simpleContent und simpleType. xs:attribute/ ist
    ein leeres Element und erwartet folglich keinen Inhalt, du bist jedoch frei auch
    <xs:attribute ...></xs:attribute> zu schreiben.

    Wo ist das Problem?

    Viele Grüsse

    Philipp

    --
    RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
    Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
    1. Hallo!

      Nicht nur im komplexen Typ, auch bei simpleContent und simpleType. xs:attribute/ ist
      ein leeres Element und erwartet folglich keinen Inhalt, du bist jedoch frei auch
      <xs:attribute ...></xs:attribute> zu schreiben.

      Wo ist das Problem?

      Mein Problem ist, wieso muß ein leeres Element am ende stehen? Meintwegen kann es dort stehen, aber wieso?

      MfG, André Laugks

      --
      L-Andre @ gmx.de
      1. Halihallo André

        Mein Problem ist, wieso muß ein leeres Element am ende stehen? Meintwegen kann es dort stehen, aber wieso?

        Das leere xs:attribute-Element meinst du? - Das muss ja nicht dort stehen. Falls ich
        dich nicht verstehe, gib mir ein Beispiel wo es eben _nicht_ funktioniert, dann verstehe
        ich die Frage besser.

        Viele Grüsse

        Philipp

        --
        RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
        Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
        1. Hallo!

          Das leere xs:attribute-Element meinst du? - Das muss ja nicht dort stehen. Falls ich
          dich nicht verstehe, gib mir ein Beispiel wo es eben _nicht_ funktioniert, dann verstehe
          ich die Frage besser.

          Beispiel:

          <datensatz>
            <name art="xyz">André</name>
          </datensatz>

          <xs:element name="datensatz">
            xs:complexType
              <xs:attribute name="art" type="xs:string"/>
              xs:sequence
                <xs:element name="name" type="xs:string"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>

          So ist das Schema nicht validiert. Erst wenn ich xs:attribute nach xs:sequence schreibe, ist das XML-Schema validiert.

          Dafür suche ich eine Erklärung.

          Also: Wieso ist das Rad rund? Weil es sind nicht rollen könnte.

          MfG, André Laugks

          --
          L-Andre @ gmx.de
          1. Hi,

            So ist das Schema nicht validiert. Erst wenn ich xs:attribute nach xs:sequence schreibe, ist das XML-Schema validiert.
            Dafür suche ich eine Erklärung.

            Aus der XSchema.DTD:

            <!ELEMENT %complexType; ((%annotation;)?,
                                     (%simpleContent;|%complexContent;|
                                      %particleAndAttrs;))>
            <!ENTITY % particleAndAttrs '((%mgs; | %group;)?, %attrDecls;)'>
            <!ENTITY % mgs '%all; | %choice; | %sequence;'>

            Es ist schlicht und einfach (aufgrund des Kommas, daß eine Sequenz darstellt) in der DTD so festgelegt,
            daß die %attrDecls; nach %sequence; (bzw. %choice; oder %all;) kommt.

            cu,
            Andreas

            --
            Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
            http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
            1. Hallo!

              Aus der XSchema.DTD:

              Ok!

              Es ist eben komisch. wenn man sich ein element anschaut, ließt man zuerst die Attribute und den Inhalt des Elementes.

              MfG, André Laugks

              --
              L-Andre @ gmx.de
              1. Hi,

                Es ist eben komisch. wenn man sich ein element anschaut, ließt man zuerst die Attribute und den Inhalt des Elementes.

                Guck Dir mal ne DTD an - da steht auch z.B. folgendes:

                <!ELEMENT A - - (%inline;)* -(A)       -- anchor -->
                <!ATTLIST A
                  %attrs;                              -- %coreattrs, %i18n, %events --
                  charset     %Charset;      #IMPLIED  -- char encoding of linked resource --
                  type        %ContentType;  #IMPLIED  -- advisory content type --
                  name        CDATA          #IMPLIED  -- named link end --
                  href        %URI;          #IMPLIED  -- URI for linked resource --
                  hreflang    %LanguageCode; #IMPLIED  -- language code --
                  rel         %LinkTypes;    #IMPLIED  -- forward link types --
                  rev         %LinkTypes;    #IMPLIED  -- reverse link types --
                  accesskey   %Character;    #IMPLIED  -- accessibility key character --
                  shape       %Shape;        rect      -- for use with client-side image maps --
                  coords      %Coords;       #IMPLIED  -- for use with client-side image maps --
                  tabindex    NUMBER         #IMPLIED  -- position in tabbing order --
                  onfocus     %Script;       #IMPLIED  -- the element got the focus --
                  onblur      %Script;       #IMPLIED  -- the element lost the focus --
                  >

                Also auch zuerst das Inhaltsmodell - in diesem Fall: (%inline;)* -(A)
                Und erst danach (sogar in einem anderen SGML-Element) die Liste der Attribute...

                cu,
                Andreas

                --
                Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
                http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
                1. Hallo Andreas,

                  Guck Dir mal ne DTD an - da steht auch z.B. folgendes:
                  Also auch zuerst das Inhaltsmodell - in diesem Fall: (%inline;)* -(A) Und erst danach (sogar in einem anderen SGML-Element) die Liste der Attribute...

                  Das ist aus der sicht eines DTD egal. Man kann die Attributlist-Dekl. machen wo man will, also ganz am Anfag o. Ende der DTD, oder eben um der Übersicht Willen nach der Element-Deklaration. Man kann auch Attributlist-Dekl. in der DTD haben, die bei keinem Element gebraucht werden.

                  Grüße
                  Thomas