Nadmierne przywiązanie do /xs:schema/xs:element pozwala na wygenerowanie dokumentu, który będąc zgodnym ze schemą, w najlepszym przypadku zarwie kilka nocek zespołowi a w najgorszym przypadku wysypie spory system. Jest jednak przykład, kiedy aż się prosi o właśnie takie definiowanie elementow...
Na pl.comp.xml napisałem, że nie przepadam za definiowanem elementów na pierwszym poziomie schemy i odwoływaniem się do nich przez ref'y.
Głównie dlatego, że pozwala na wygenerowanie dokumentu, który będąc zgodnym ze schemą w najlepszym przypadku zarwie kilka nocek zespołowi a w najgorszym wysypie dowolny system.
Jest jednak ciekawy przykład, kiedy właśnie takie zdefiniowanie elementów ma głęboki sens.
Rozważmy CMS'a, który pozwala na przechowywanie *dowolnych*kawałków* (x)html'a:
<xs:element name="DIV" type="htmlFlowContent"/>
<xs:complexType name="htmlFlowContent" mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="htmlInlineContent"/>
<xs:group ref="htmlBlockContent"/>
<xs:group name="htmlInlineContent">
...
<xs:group name="htmlBlockContent">
<xs:element ref="P"/>
...
<xs:element name="P">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="htmlInlineContent"/>
Itp. Itd.
Definicja BODY Przy HTML 4(.01) Strict:
<xs:element name="BODY" type="htmlBodyContent"/>
<xs:complexType name="htmlBodyContent">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="htmlBlockContent"/>
<xs:element ref="INS"/>
<xs:element ref="DEL"/>
Jak znajdę chwilę czasu - dokonczę i podrzucę schemę definiującą (prawie) całą html'ową czworkę w wersji Strict.








Wtedy nie będzie wątpliwości, że typ htmlInlineContent określa precyzyjnie _zwartość_ zarówno P jak H1-H6 (będących elementami grupy htmlBlockAll), typ htmlBlockContent określa _precyzyjnie_ zawartość zarówno BLOCKQUOTE jak FORM, typ htmlFlowContent określa _precyzyjnie_ zarówno DIV jak LI (tutaj pewnien nie jestem, ale nie mam czasu na grzebanie w DTD).