Q. Модели состовления дизайна схем
A [flax].
Van Der Vlist
DTD
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<ref name="element-library"/>
</start>
<define name="element-library">
<element name="library">
<oneOrMore>
<ref name="element-book"/>
</oneOrMore>
</element>
</define>
<define name="element-book">
<element name="book">
<attribute name="id"/>
<attribute name="available"/>
<ref name="element-isbn"/>
<ref name="element-title"/>
<oneOrMore>
<ref name="element-author"/>
</oneOrMore>
<zeroOrMore>
<ref name="element-character"/>
</zeroOrMore>
</element>
</define>
<!-- итд -->
</grammar>
content-oriented style is to defines content of each element as a separate pattern:
<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<element name="library">
<ref name="library-content"/>
</element>
</start>
<define name="library-content">
<oneOrMore>
<element name="book">
<ref name="book-content"/>
</element>
</oneOrMore>
</define>
<define name="book-content">
<attribute name="id"/>
<attribute name="available"/>
<element name="isbn">
<ref name="isbn-content"/>
</element>
<element name="title">
<ref name="title-content"/>
</element>
<oneOrMore>
<element name="author">
<ref name="author-content"/>
</element>
</oneOrMore>
<zeroOrMore>
<element name="character">
<ref name="character-content"/>
</element>
</zeroOrMore>
</define>
...
Russian doll
Bizarre combinations
element-book = element book {
book-basic,
book-extended
}
book-basic =
attribute id { text },
element-isbn,
element-title,
element-author+,
element-character?
book-extended =
attribute available { text },
element-character*
1) The best for extension is content-oriented style
2) Bizarre combinations is possible only in RelaxNG