XML-Schema: <xs:attribute/> am Ende des komlexen Typs
André Laugks
- xml
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
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
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
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
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
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
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
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
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