[gnome-doc-utils] rng/mallard: Update Mallard RNG files



commit 5e5eb3df9dd2fcae8cdf0542961af09398f7a2c4
Author: Shaun McCance <shaunm gnome org>
Date:   Tue Mar 22 10:02:24 2011 -0400

    rng/mallard: Update Mallard RNG files

 rng/mallard/mallard.rnc |  844 +++++++++++++++---------
 rng/mallard/mallard.rng | 1710 ++++++++++++++++++++++++++++++-----------------
 2 files changed, 1641 insertions(+), 913 deletions(-)
---
diff --git a/rng/mallard/mallard.rnc b/rng/mallard/mallard.rnc
index 63e5455..6bb92af 100644
--- a/rng/mallard/mallard.rnc
+++ b/rng/mallard/mallard.rnc
@@ -3,396 +3,549 @@ namespace local = ""
 default namespace mal = "http://projectmallard.org/1.0/";
 start = mal_page
 mal_page = element page {
-  attribute id { xsd:NMTOKEN },
-  attribute type { "guide" | "topic" } ?,
-  attribute style { xsd:NMTOKENS } ?,
-  attribute groups { xsd:NMTOKENS } ?,
-  mal_attr_external *,
+  mal_page_attr,
 
   mal_info ?,
   mal_block_title,
-  mal_block *,
-  mal_section *
+  mal_block_subtitle ?,
+  ( mal_block | mal_links ) *,
+  mal_section *,
+  mal_links *
 }
+mal_page_attr = (
+  attribute id { xsd:NMTOKEN },
+  attribute type { xsd:NMTOKEN } ?,
+  attribute style { xsd:NMTOKENS } ?,
+  attribute version { text } ?,
+  mal_attr_external *
+)
 
 mal_section = element section {
-  attribute id { xsd:ID },
-  attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
+  mal_section_attr,
 
   mal_info ?,
   mal_block_title,
-  mal_block *,
-  mal_section *
+  mal_block_subtitle ?,
+  ( mal_block | mal_links ) *,
+  mal_section *,
+  mal_links *
 }
+mal_section_attr = (
+  attribute id { xsd:ID },
+  attribute style { xsd:NMTOKENS } ?,
+  mal_attr_external *
+)
 
 mal_info = element info {
-  mal_attr_external *,
-
-  ( mal_info_desc ? &
-    mal_info_credit * &
-    mal_info_license * &
-    mal_info_link * &
-    mal_info_title * &
-    mal_info_revision * &
-    mal_external *
-  )
+  mal_info_attr,
+  mal_info_content
 }
+mal_info_attr = (
+  mal_attr_external *
+)
+mal_info_content = (
+  mal_info_desc ? &
+  mal_info_credit * &
+  mal_info_license * &
+  mal_info_link * &
+  mal_info_title * &
+  mal_info_revision * &
+  mal_external *
+)
 
 mal_info_credit = element credit {
-  attribute type { xsd:NMTOKENS } ?,
-  attribute * - (mal:* | local:*) { text } *,
-
-  ( mal_info_name &
-    mal_info_email ? &
-    mal_info_years ? &
-    mal_external *
-  )
+  mal_info_credit_attr,
+  mal_info_credit_content
 }
+mal_info_credit_attr = (
+  attribute type { xsd:NMTOKENS } ?,
+  attribute style { xsd:NMTOKENS } ?,
+  mal_attr_external *
+)
+mal_info_credit_content = (
+  mal_info_name &
+  mal_info_email * &
+  mal_info_years ? &
+  mal_external *
+)
 
 mal_info_link = element link {
-  attribute type { xsd:NMTOKEN },
-  ( attribute xref { text } |
-    attribute href { text }
-  ),
-  attribute group { text } ?
-  attribute * - (mal:* | local:*) { text } *,
-
-  mal_external *
+  mal_info_link_attr,
+  mal_info_link_content *
 }
+mal_info_link_attr = (
+  attribute type { xsd:NMTOKEN },
+  attribute style { xsd:NMTOKENS } ?,
+  mal_attr_link +,
+  attribute group { text } ?,
+  mal_attr_external *
+)
+mal_info_link_content = mal_external
 
 mal_info_title = element title {
+  mal_info_title_attr,
+  mal_info_title_inline
+}
+mal_info_title_attr = (
   attribute type { xsd:NMTOKEN },
+  attribute style { xsd:NMTOKENS } ?,
   attribute role { xsd:NMTOKEN } ?,
-  attribute * - (mal:* | local:*) { text } *,
-
-  mal_inline
-}
+  mal_attr_external *
+)
+mal_info_title_inline = mal_inline
 
 mal_info_license = element license {
-  attribute href { text } ?,
-  attribute * - (mal:* | local:*) { text } *,
-
-  mal_block +
+  mal_info_license_attr,
+  mal_info_license_content +
 }
+mal_info_license_attr = (
+  attribute style { xsd:NMTOKENS } ?,
+  attribute href { text } ?,
+  mal_attr_external *
+)
+mal_info_license_content = mal_block
 
 mal_info_desc = element desc {
-  attribute * - (mal:* | local:*) { text } *,
-
-  mal_inline
+  mal_info_desc_attr,
+  mal_info_desc_inline
 }
+mal_info_desc_attr = (
+  attribute style { xsd:NMTOKENS } ?,
+  mal_attr_external *
+)
+mal_info_desc_inline = mal_inline
 
 mal_info_revision = element revision {
+  mal_info_revision_attr,
+  mal_block_title ?,
+  mal_block_desc ?,
+  mal_info_revision_content *
+}
+mal_info_revision_attr = (
+  attribute style { xsd:NMTOKENS } ?,
   attribute version { text } ?,
   attribute docversion { text } ?,
   attribute pkgversion { text } ?,
   attribute date { xsd:date } ?,
-  attribute status {
-    "stub"   | "incomplete" | "draft" | "outdated" |
-    "review" | "candidate"  | "final" } ?,
-  attribute * - (mal:* | local:*) { text } *,
-
-  mal_block_title ?,
-  mal_block_desc ?,
-  mal_external *
-}
+  attribute status { xsd:NMTOKEN } ?,
+  mal_attr_external *
+)
+mal_info_revision_content = mal_external
 
 mal_info_years = element years {
-  attribute * - (mal:* | local:*) { text } *,
-  mal_inline
+  mal_info_years_attr,
+  mal_info_years_inline
 }
+mal_info_years_attr = (
+  attribute style { xsd:NMTOKENS } ?,
+  mal_attr_external *
+)
+mal_info_years_inline = mal_inline
 
 mal_info_email = element email {
-  attribute * - (mal:* | local:*) { text } *,
-  mal_inline
+  mal_info_email_attr,
+  mal_info_email_inline
 }
+mal_info_email_attr = (
+  attribute style { xsd:NMTOKENS } ?,
+  mal_attr_external *
+)
+mal_info_email_inline = mal_inline
 
 mal_info_name = element name {
-  attribute * - (mal:* | local:*) { text } *,
-  mal_inline
+  mal_info_name_attr,
+  mal_info_name_inline
 }
+mal_info_name_attr = (
+  attribute style { xsd:NMTOKENS } ?,
+  mal_attr_external *
+)
+mal_info_name_inline = mal_inline
 
-mal_block = (
-  mal_block_basic |
-  mal_block_formal |
-  mal_block_lists |
-  mal_table
+mal_links = element links {
+  mal_links_attr,
+  mal_block_title ?,
+  mal_links_content *
+}
+mal_links_attr = (
+  attribute type { xsd:NMTOKEN },
+  attribute style { xsd:NMTOKENS } ?,
+  attribute groups { xsd:NMTOKENS } ?,
+  mal_attr_external *
 )
+mal_links_content = mal_external
 
-mal_block_basic = (
-  mal_block_code |
-  mal_block_example |
-  mal_block_media |
-  mal_block_p |
-  mal_block_screen
+mal_block = (
+  mal_block_elements |
+  element * - (mal:* | local:*) {
+    attribute * { text } *,
+    ( mal_external * &
+      mal_block_elements *
+    )
+  }
 )
-mal_block_formal = (
+mal_block_elements = (  
+  mal_block_code |
   mal_block_comment |
+  mal_block_example |
   mal_block_figure |
+  mal_block_list |
   mal_block_listing |
+  mal_block_media |
   mal_block_note |
+  mal_block_p |
   mal_block_quote |
-  mal_block_synopsis
-)
-mal_block_lists = (
-  mal_block_list |
+  mal_block_screen |
   mal_block_steps |
+  mal_block_synopsis |
   mal_block_terms |
-  mal_block_tree
+  mal_block_tree |
+  mal_table
 )
+
 mal_block_code = element code {
+  mal_block_code_attr,
+  mal_block_code_inline
+}
+mal_block_code_attr = (
   attribute style { xsd:NMTOKENS } ?,
   attribute mime { text } ?,
-  mal_attr_external *,
-
-  mal_inline
-}
+  mal_attr_external *
+)
+mal_block_code_inline = mal_inline
 
 mal_block_example = element example {
-  attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
-
-  mal_block +
+  mal_block_example_attr,
+  mal_block_example_content +
 }
+mal_block_example_attr = (
+  attribute style { xsd:NMTOKENS } ?,
+  mal_attr_external *
+)
+mal_block_example_content = mal_block
 
 mal_block_media = element media {
+  mal_block_media_attr,
+  mal_block_media_content *
+}
+mal_block_media_attr = (
   attribute type { "image" | "video" | "audio" | "application" } ?,
+  attribute style { xsd:NMTOKENS } ?,
   attribute mime { text } ?,
   attribute src { text },
   attribute height { text } ?,
   attribute width { text } ?,
-  attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
-
-  mal_block *
-}
+  mal_attr_external *
+)
+mal_block_media_content = mal_block
 
 mal_block_p = element p {
-  attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
-
-  mal_inline
+  mal_block_p_attr,
+  mal_block_p_inline
 }
+mal_block_p_attr = (
+  attribute style { xsd:NMTOKENS } ?,
+  mal_attr_external *
+)
+mal_block_p_inline = mal_inline
 
 mal_block_screen = element screen {
+  mal_block_screen_attr,
+  mal_block_screen_inline
+}
+mal_block_screen_attr = (
   attribute style { xsd:NMTOKENS } ?,
   attribute mime { text } ?,
-  mal_attr_external *,
-
-  mal_inline
-}
+  mal_attr_external *
+)
+mal_block_screen_inline = mal_inline
 
 mal_block_quote = element quote {
-  attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
-
+  mal_block_quote_attr,
   mal_block_title ?,
-  mal_block_cite,
-  mal_block +
+  mal_block_cite ?,
+  mal_block_quote_content +  
 }
-
-mal_block_comment = element comment {
+mal_block_quote_attr = (
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
+  mal_attr_external *
+)
+mal_block_quote_content = mal_block
 
+mal_block_comment = element comment {
+  mal_block_comment_attr,
   mal_block_title ?,
-  mal_block_cite,
-  mal_block +
+  mal_block_cite ?,
+  mal_block_comment_content +
 }
-
-mal_block_figure = element figure {
+mal_block_comment_attr = (
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
+  mal_attr_external *
+)
+mal_block_comment_content = mal_block
 
+mal_block_figure = element figure {
+  mal_block_figure_attr,
   mal_block_title ?,
   mal_block_desc ?,
-  mal_block +
+  mal_block_figure_content +
 }
-
-mal_block_listing = element listing {
+mal_block_figure_attr = (
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
+  mal_attr_external *
+)
+mal_block_figure_content = mal_block
 
+mal_block_listing = element listing {
+  mal_block_listing_attr,
   mal_block_title ?,
   mal_block_desc ?,
-  mal_block +
+  mal_block_listing_content +
 }
-
-mal_block_note = element note {
+mal_block_listing_attr = (
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
+  mal_attr_external *
+)
+mal_block_listing_content = mal_block
 
+mal_block_note = element note {
+  mal_block_note_attr,
   mal_block_title ?,
-  mal_block +
+  mal_block_note_content +
 }
-
-mal_block_synopsis = element synopsis {
+mal_block_note_attr = (
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
+  mal_attr_external *
+)
+mal_block_note_content = mal_block
 
+mal_block_synopsis = element synopsis {
+  mal_block_synopsis_attr,
   mal_block_title ?,
   mal_block_desc ?,
-  mal_block +
+  mal_block_synopsis_content +
 }
-
-mal_block_list = element list {
-  attribute type { xsd:NMTOKEN } ?,
+mal_block_synopsis_attr = (
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
+  mal_attr_external *
+)
+mal_block_synopsis_content = mal_block
 
+mal_block_list = element list {
+  mal_block_list_attr,
   mal_block_title ?,
   mal_block_list_item +
 }
-mal_block_list_item = element item {
+mal_block_list_attr = (
+  attribute type { xsd:NMTOKEN } ?,
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
-
-  mal_block +
+  mal_attr_external *
+)
+mal_block_list_item = element item {
+  mal_block_list_item_attr,
+  mal_block_list_item_content +
 }
-
-mal_block_terms = element terms {
+mal_block_list_item_attr = (
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
+  mal_attr_external *
+)
+mal_block_list_item_content = mal_block
 
+mal_block_steps = element steps {
+  mal_block_steps_attr,
   mal_block_title ?,
-  mal_block_terms_item +
+  mal_block_steps_item +
 }
-mal_block_terms_item = element item {
+mal_block_steps_attr = (
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
-
-  mal_block_title +,
-  mal_block +
+  mal_attr_external *
+)
+mal_block_steps_item = element item {
+  mal_block_steps_item_attr,
+  mal_block_steps_item_content +
 }
-
-mal_block_steps = element steps {
+mal_block_steps_item_attr = (
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
+  mal_attr_external *
+)
+mal_block_steps_item_content = mal_block
 
+mal_block_terms = element terms {
+  mal_block_terms_attr,
   mal_block_title ?,
-  mal_block_steps_item +
+  mal_block_terms_item +
 }
-mal_block_steps_item = element item {
+mal_block_terms_attr = (
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
-
-  mal_block +
+  mal_attr_external *
+)
+mal_block_terms_item = element item {
+  mal_block_terms_item_attr,
+  mal_block_title +,
+  mal_block_terms_item_content +
 }
-
-mal_block_tree = element tree {
+mal_block_terms_item_attr = (
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
+  mal_attr_external *
+)
+mal_block_terms_item_content = mal_block
 
+mal_block_tree = element tree {
+  mal_block_tree_attr,
   mal_block_title ?,
   mal_block_tree_item +
 }
+mal_block_tree_attr = (
+  attribute style { xsd:NMTOKENS } ?,
+  mal_attr_external *
+)
 mal_block_tree_item = element item {
+  mal_block_tree_item_attr,
+  mal_block_tree_item_inline,
+  mal_block_tree_item *
+}
+mal_block_tree_item_attr = (
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
+  mal_attr_external *
+)
+mal_block_tree_item_inline = mal_inline
 
-  mal_inline,
-  mal_block_tree_item *
+mal_table = element table {
+  mal_table_attr,
+
+  mal_block_title ?,
+  mal_block_desc ?,
+
+  ( mal_table_col + |
+    mal_table_colgroup +
+  ) ?,
+
+  ( mal_table_tr + |
+    ( mal_table_thead ?,
+      mal_table_tbody +,
+      mal_table_tfoot ?
+    )
+  )
 }
+mal_table_attr = (
+  attribute style { xsd:NMTOKENS } ?,
+  attribute frame {
+    "all" | "none" |
+    list { ("top" | "bottom" | "left" | "right") * }
+  } ?,
+  attribute rules {
+    "all" | "groups" | "none" |
+    list { ("rows" | "rowgroups" | "cols" | "colgroups") * }
+  } ?,
+  attribute shade {
+    "all" | "groups" | "none" |
+    list { ("rows" | "rowgroups" | "cols" | "colgroups") * }
+  } ?,
+  mal_attr_external *
+)
 
 mal_table_col = element col {
-  attribute style { xsd:NMTOKENS } ?,
-  attribute * - (mal:* | local:*) { text } *
+  mal_table_col_attr
 }
-mal_table_colgroup = element colgroup {
+mal_table_col_attr = (
   attribute style { xsd:NMTOKENS } ?,
-  attribute * - (mal:* | local:*) { text } *,
-
+  mal_attr_external *
+)
+mal_table_colgroup = element colgroup {
+  mal_table_colgroup_attr,
   mal_table_col *
 }
-
-mal_table_tr = element tr {
+mal_table_colgroup_attr = (
   attribute style { xsd:NMTOKENS } ?,
-  attribute * - (mal:* | local:*) { text } *,
+  mal_attr_external *
+)
 
+mal_table_tr = element tr {
+  mal_table_tr_attr,
   mal_table_td *
 }
-mal_table_thead = element thead {
+mal_table_tr_attr = (
   attribute style { xsd:NMTOKENS } ?,
-  attribute * - (mal:* | local:*) { text } *,
-
+  mal_attr_external *
+)
+mal_table_thead = element thead {
+  mal_table_thead_attr,
   mal_table_tr +
 }
-mal_table_tbody = element tbody {
+mal_table_thead_attr = (
   attribute style { xsd:NMTOKENS } ?,
-  attribute * - (mal:* | local:*) { text } *,
-
+  mal_attr_external *
+)
+mal_table_tbody = element tbody {
+  mal_table_tbody_attr,
   mal_table_tr +
 }
-mal_table_tfoot = element tfoot {
+mal_table_tbody_attr = (
   attribute style { xsd:NMTOKENS } ?,
-  attribute * - (mal:* | local:*) { text } *,
-
+  mal_attr_external *
+)
+mal_table_tfoot = element tfoot {
+  mal_table_tfoot_attr,
   mal_table_tr +
 }
+mal_table_tfoot_attr = (
+  attribute style { xsd:NMTOKENS } ?,
+  mal_attr_external *
+)
 
 mal_table_td = element td {
+  mal_table_td_attr,
+  mal_table_td_content +
+}
+mal_table_td_attr = (
   attribute style { xsd:NMTOKENS } ?,
-  attribute * - (mal:* | local:*) { text } *,
   attribute rowspan { text } ?,
   attribute colspan { text } ?,
+  mal_attr_external *
+)
+mal_table_td_content = mal_block
 
-  mal_block +
+mal_block_title = element title {
+  mal_block_title_attr,
+  mal_block_title_inline
 }
-
-mal_table = element table {
+mal_block_title_attr = (
   attribute style { xsd:NMTOKENS } ?,
-  attribute * - (mal:* | local:*) { text } *,
-  attribute frame {
-    "all" | "none" |
-    list { ("top" | "bottom" | "left" | "right") * }
-  } ?,
-  attribute rules {
-    "all" | "groups" | "none" |
-    list { ("rows" | "rowgroups" | "cols" | "colgroups") * }
-  } ?,
-  attribute shade {
-    "all" | "groups" | "none" |
-    list { ("rows" | "rowgroups" | "cols" | "colgroups") * }
-  } ?,
-
-  mal_block_title ?,
-  mal_block_desc ?,
-
-  ( mal_table_col + |
-    mal_table_colgroup +
-  ) ?,
+  mal_attr_external *
+)
+mal_block_title_inline = mal_inline
 
-  ( mal_table_tr + |
-    ( mal_table_thead ?,
-      mal_table_tbody +,
-      mal_table_tfoot ?
-    )
-  )
+mal_block_subtitle = element subtitle {
+  mal_block_subtitle_attr,
+  mal_block_subtitle_inline
 }
-
-mal_block_desc = element desc {
+mal_block_subtitle_attr = (
   attribute style { xsd:NMTOKENS } ?,
-  attribute * - (mal:* | local:*) { text } *,
+  mal_attr_external *
+)
+mal_block_subtitle_inline = mal_inline
 
-  mal_inline
+mal_block_desc = element desc {
+  mal_block_desc_attr,
+  mal_block_desc_inline
 }
+mal_block_desc_attr = (
+  attribute style { xsd:NMTOKENS } ?,
+  mal_attr_external *
+)
+mal_block_desc_inline = mal_inline
 
 mal_block_cite = element cite {
+  mal_block_cite_attr,
+  mal_block_cite_inline
+}
+mal_block_cite_attr = (
   attribute style { xsd:NMTOKENS } ?,
-  attribute * - (mal:* | local:*) { text } *,
   attribute date { text } ?,
   attribute href { text } ?,
-
-  mal_inline
-}
-
-mal_block_subtitle = element subtitle {
-  mal_inline
-}
-
-mal_block_title = element title {
-  mal_inline
-}
+  mal_attr_external *
+)
+mal_block_cite_inline = mal_inline
 
 mal_inline = {
   mal_inline_app * &
@@ -411,161 +564,222 @@ mal_inline = {
   mal_inline_span * &
   mal_inline_sys * &
   mal_inline_var * &
-  element * - (mal:* | local:*) { mal_inline } * &
+  element * - (mal:* | local:*) {
+    attribute * { text } *,
+    mal_inline
+  } * &
   text ?
 }
 
 mal_inline_app = element app {
-  mal_attr_link ?,
-  attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
-
-  mal_inline
+  mal_inline_app_attr,
+  mal_inline_app_inline
 }
+mal_inline_app_attr = (
+  mal_attr_link *,
+  attribute style { xsd:NMTOKENS } ?,
+  mal_attr_external *
+)
+mal_inline_app_inline = mal_inline
 
 mal_inline_code = element code {
-  mal_attr_link ?,
+  mal_inline_code_attr,
+  mal_inline_code_inline
+}
+mal_inline_code_attr = (
+  mal_attr_link *,
   attribute style { xsd:NMTOKENS } ?,
   attribute mime { text } ?,
-  mal_attr_external *,
-
-  mal_inline
-}
+  mal_attr_external *
+)
+mal_inline_code_inline = mal_inline
 
 mal_inline_cmd = element cmd {
-  mal_attr_link ?,
+  mal_inline_cmd_attr,
+  mal_inline_cmd_inline
+}
+mal_inline_cmd_attr = (
+  mal_attr_link *,
   attribute style { xsd:NMTOKENS } ?,
   attribute mime { text } ?,
-  mal_attr_external *,
-
-  mal_inline
-}
+  mal_attr_external *
+)
+mal_inline_cmd_inline = mal_inline
 
 mal_inline_output = element output {
-  mal_attr_link ?,
-  attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
-
-  mal_inline
+  mal_inline_output_attr,
+  mal_inline_output_inline
 }
-
-mal_inline_em = element em {
-  mal_attr_link ?,
+mal_inline_output_attr = (
+  mal_attr_link *,
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
+  mal_attr_external *
+)
+mal_inline_output_inline = mal_inline
 
-  mal_inline
+mal_inline_em = element em {
+  mal_inline_em_attr,
+  mal_inline_em_inline
 }
-
-mal_inline_file = element file {
-  mal_attr_link ?,
+mal_inline_em_attr = (
+  mal_attr_link *,
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
+  mal_attr_external *
+)
+mal_inline_em_inline = mal_inline
 
-  mal_inline
+mal_inline_file = element file {
+  mal_inline_file_attr,
+  mal_inline_file_inline
 }
-
-mal_inline_gui = element gui {
-  mal_attr_link ?,
+mal_inline_file_attr = (
+  mal_attr_link *,
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
+  mal_attr_external *
+)
+mal_inline_file_inline = mal_inline
 
-  mal_inline
+mal_inline_gui = element gui {
+  mal_inline_gui_attr,
+  mal_inline_gui_inline
 }
-
-mal_inline_guiseq = element guiseq {
+mal_inline_gui_attr = (
+  mal_attr_link *,
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
+  mal_attr_external *
+)
+mal_inline_gui_inline = mal_inline
 
-  mixed { mal_inline_gui + }
+mal_inline_guiseq = element guiseq {
+  mal_inline_guiseq_attr,
+  mal_inline_guiseq_inline
 }
-
-mal_inline_link = element link {
-  ( attribute xref { text } |
-    attribute href { text } |
-    ( attribute xref { text }, attribute href { text } )
-  ),
-  attribute role { text } ?,
+mal_inline_guiseq_attr = (
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
+  mal_attr_external *
+)
+mal_inline_guiseq_inline = (
+  mal_inline_gui + &
+  text
+)
 
-  mal_inline
+mal_inline_link = element link {
+  mal_inline_link_attr,
+  mal_inline_link_inline
 }
+mal_inline_link_attr = (
+  mal_attr_link +,
+  attribute style { xsd:NMTOKENS } ?,
+  attribute role { text } ?,
+  mal_attr_external *
+)
+mal_inline_link_inline = mal_inline
 
 mal_inline_media = element media {
-  mal_attr_link ?,
-  attribute style { xsd:NMTOKENS } ?,
+  mal_inline_media_attr,
+  mal_inline_media_inline
+}
+mal_inline_media_attr = (
+  mal_attr_link *,
   attribute type { "image" | "video" | "audio" | "application" } ?,
+  attribute style { xsd:NMTOKENS } ?,
   attribute mime { text } ?,
   attribute src { text },
   attribute height { text } ?,
   attribute width { text } ?,
-  mal_attr_external *,
-
-  mal_inline
-}
+  mal_attr_external *
+)
+mal_inline_media_inline = mal_inline
 
 mal_inline_keyseq = element keyseq {
-  attribute style { xsd:NMTOKENS } ?,
-  attribute type { "combo" | "sequence" } ?,
-  mal_attr_external *,
-
-  mixed {
-    (mal_inline_key | mal_inline_keyseq) *
-  }
+  mal_inline_keyseq_attr,
+  mal_inline_keyseq_inline
 }
-
-mal_inline_key = element key {
-  mal_attr_link ?,
+mal_inline_keyseq_attr = (
+  attribute type { "combo" | "sequence" } ?,
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
+  mal_attr_external *
+)
+mal_inline_keyseq_inline = (
+  (mal_inline_key | mal_inline_keyseq) + &
+  text
+)
 
-  mal_inline
+mal_inline_key = element key {
+  mal_inline_key_attr,
+  mal_inline_key_inline
 }
-
-mal_inline_span = element span {
-  mal_attr_link ?,
+mal_inline_key_attr = (
+  mal_attr_link *,
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
+  mal_attr_external *
+)
+mal_inline_key_inline = mal_inline
 
-  mal_inline
+mal_inline_span = element span {
+  mal_inline_span_attr,
+  mal_inline_span_inline
 }
-
-mal_inline_sys = element sys {
-  mal_attr_link ?,
+mal_inline_span_attr = (
+  mal_attr_link *,
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
+  mal_attr_external *
+)
+mal_inline_span_inline = mal_inline
 
-  mal_inline
+mal_inline_sys = element sys {
+  mal_inline_sys_attr,
+  mal_inline_sys_inline
 }
-
-mal_inline_input = element input {
-  mal_attr_link ?,
+mal_inline_sys_attr = (
+  mal_attr_link *,
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
+  mal_attr_external *
+)
+mal_inline_sys_inline = mal_inline
 
-  mal_inline
+mal_inline_input = element input {
+  mal_inline_input_attr,
+  mal_inline_input_inline
 }
-
-mal_inline_var = element var {
-  mal_attr_link ?,
+mal_inline_input_attr = (
+  mal_attr_link *,
   attribute style { xsd:NMTOKENS } ?,
-  mal_attr_external *,
+  mal_attr_external *
+)
+mal_inline_input_inline = mal_inline
 
-  mal_inline
+mal_inline_var = element var {
+  mal_inline_var_attr,
+  mal_inline_var_inline
 }
+mal_inline_var_attr = (
+  mal_attr_link *,
+  attribute style { xsd:NMTOKENS } ?,
+  mal_attr_external *
+)
+mal_inline_var_inline = mal_inline
 
 mal_external = element * - (mal:* | local:*) {
   attribute * { text } *,
-  mal_anything *
+  ( mal_anything * &
+    text ?
+  )
 }
 mal_anything = element * {
   attribute * { text } *,
-  mal_anything *
+  ( mal_anything * &
+    text ?
+  )
 }
 mal_attr_external = attribute * - (mal:* | local:*) { text }
 
-mal_attr_link =
-  ( attribute xref { text } ?
-  | { attribute dref { text } ?, attribute href { text } ? }
-  )
+mal_attr_link = (
+  attribute xref { text } |
+  attribute href { text } |
+  attribute action { text }
+)
+mal_attr_mal_link = (
+  attribute mal:xref { text } ?,
+  attribute mal:action { text } ?
+)
diff --git a/rng/mallard/mallard.rng b/rng/mallard/mallard.rng
index b82f835..720b18e 100644
--- a/rng/mallard/mallard.rng
+++ b/rng/mallard/mallard.rng
@@ -10,15 +10,37 @@
 
 <define name="mal_page">
   <element name="page">
+    <ref name="mal_page_attr"/>
+    <optional>
+      <ref name="mal_info"/>
+    </optional>
+    <ref name="mal_block_title"/>
+    <optional>
+      <ref name="mal_block_subtitle"/>
+    </optional>
+    <zeroOrMore>
+      <choice>
+        <ref name="mal_block"/>
+        <ref name="mal_links"/>
+      </choice>
+    </zeroOrMore>
+    <zeroOrMore>
+      <ref name="mal_section"/>
+    </zeroOrMore>
+    <zeroOrMore>
+      <ref name="mal_links"/>
+    </zeroOrMore>
+  </element>
+</define>
+
+<define name="mal_page_attr">
+  <group>
     <attribute name="id">
       <data type="NMTOKEN" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
     </attribute>
     <optional>
       <attribute name="type">
-        <choice>
-          <value>guide</value>
-          <value>topic</value>
-        </choice>
+        <data type="NMTOKEN" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
     </optional>
     <optional>
@@ -27,28 +49,43 @@
       </attribute>
     </optional>
     <optional>
-      <attribute name="groups">
-        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+      <attribute name="version">
+        <text/>
       </attribute>
     </optional>
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_section">
+  <element name="section">
+    <ref name="mal_section_attr"/>
     <optional>
       <ref name="mal_info"/>
     </optional>
     <ref name="mal_block_title"/>
+    <optional>
+      <ref name="mal_block_subtitle"/>
+    </optional>
     <zeroOrMore>
-      <ref name="mal_block"/>
+      <choice>
+        <ref name="mal_block"/>
+        <ref name="mal_links"/>
+      </choice>
     </zeroOrMore>
     <zeroOrMore>
       <ref name="mal_section"/>
     </zeroOrMore>
+    <zeroOrMore>
+      <ref name="mal_links"/>
+    </zeroOrMore>
   </element>
 </define>
 
-<define name="mal_section">
-  <element name="section">
+<define name="mal_section_attr">
+  <group>
     <attribute name="id">
       <data type="ID" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
     </attribute>
@@ -60,186 +97,236 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_info">
+  <element name="info">
+    <ref name="mal_info_attr"/>
+    <ref name="mal_info_content"/>
+  </element>
+</define>
+
+<define name="mal_info_attr">
+  <group>
+    <zeroOrMore>
+      <ref name="mal_attr_external"/>
+    </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_info_content">
+  <interleave>
     <optional>
-      <ref name="mal_info"/>
+      <ref name="mal_info_desc"/>
     </optional>
-    <ref name="mal_block_title"/>
     <zeroOrMore>
-      <ref name="mal_block"/>
+      <ref name="mal_info_credit"/>
     </zeroOrMore>
     <zeroOrMore>
-      <ref name="mal_section"/>
+      <ref name="mal_info_license"/>
     </zeroOrMore>
-  </element>
-</define>
-
-<define name="mal_info">
-  <element name="info">
     <zeroOrMore>
-      <ref name="mal_attr_external"/>
+      <ref name="mal_info_link"/>
     </zeroOrMore>
-    <interleave>
-      <optional>
-        <ref name="mal_info_desc"/>
-      </optional>
-      <zeroOrMore>
-        <ref name="mal_info_credit"/>
-      </zeroOrMore>
-      <zeroOrMore>
-        <ref name="mal_info_license"/>
-      </zeroOrMore>
-      <zeroOrMore>
-        <ref name="mal_info_link"/>
-      </zeroOrMore>
-      <zeroOrMore>
-        <ref name="mal_info_title"/>
-      </zeroOrMore>
-      <zeroOrMore>
-        <ref name="mal_info_revision"/>
-      </zeroOrMore>
-      <zeroOrMore>
-        <ref name="mal_external"/>
-      </zeroOrMore>
-    </interleave>
-  </element>
+    <zeroOrMore>
+      <ref name="mal_info_title"/>
+    </zeroOrMore>
+    <zeroOrMore>
+      <ref name="mal_info_revision"/>
+    </zeroOrMore>
+    <zeroOrMore>
+      <ref name="mal_external"/>
+    </zeroOrMore>
+  </interleave>
 </define>
 
 <define name="mal_info_credit">
   <element name="credit">
+    <ref name="mal_info_credit_attr"/>
+    <ref name="mal_info_credit_content"/>
+  </element>
+</define>
+
+<define name="mal_info_credit_attr">
+  <group>
     <optional>
       <attribute name="type">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
     </optional>
-    <zeroOrMore>
-      <attribute>
-        <anyName>
-          <except>
-            <nsName ns="http://projectmallard.org/1.0/"/>
-            <nsName ns=""/>
-          </except>
-        </anyName>
-        <text/>
+    <optional>
+      <attribute name="style">
+        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
+    </optional>
+    <zeroOrMore>
+      <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <interleave>
-      <ref name="mal_info_name"/>
-      <optional>
-        <ref name="mal_info_email"/>
-      </optional>
-      <optional>
-        <ref name="mal_info_years"/>
-      </optional>
-      <zeroOrMore>
-        <ref name="mal_external"/>
-      </zeroOrMore>
-    </interleave>
-  </element>
+  </group>
+</define>
+
+<define name="mal_info_credit_content">
+  <interleave>
+    <ref name="mal_info_name"/>
+    <zeroOrMore>
+      <ref name="mal_info_email"/>
+    </zeroOrMore>
+    <optional>
+      <ref name="mal_info_years"/>
+    </optional>
+    <zeroOrMore>
+      <ref name="mal_external"/>
+    </zeroOrMore>
+  </interleave>
 </define>
 
 <define name="mal_info_link">
   <element name="link">
+    <ref name="mal_info_link_attr"/>
+    <zeroOrMore>
+      <ref name="mal_info_link_content"/>
+    </zeroOrMore>
+  </element>
+</define>
+
+<define name="mal_info_link_attr">
+  <group>
     <attribute name="type">
       <data type="NMTOKEN" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
     </attribute>
-    <choice>
-      <attribute name="xref">
-        <text/>
-      </attribute>
-      <attribute name="href">
-        <text/>
+    <optional>
+      <attribute name="style">
+        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
-    </choice>
+    </optional>
+    <oneOrMore>
+      <ref name="mal_attr_link"/>
+    </oneOrMore>
     <optional>
       <attribute name="group">
         <text/>
       </attribute>
     </optional>
     <zeroOrMore>
-      <attribute>
-        <anyName>
-          <except>
-            <nsName ns="http://projectmallard.org/1.0/"/>
-            <nsName ns=""/>
-          </except>
-        </anyName>
-        <text/>
-      </attribute>
-    </zeroOrMore>
-    <zeroOrMore>
-      <ref name="mal_external"/>
+      <ref name="mal_attr_external"/>
     </zeroOrMore>
-  </element>
+  </group>
+</define>
+
+<define name="mal_info_link_content">
+  <ref name="mal_external"/>
 </define>
 
 <define name="mal_info_title">
   <element name="title">
+    <ref name="mal_info_title_attr"/>
+    <ref name="mal_info_title_inline"/>
+  </element>
+</define>
+
+<define name="mal_info_title_attr">
+  <group>
     <attribute name="type">
       <data type="NMTOKEN" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
     </attribute>
     <optional>
+      <attribute name="style">
+        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+      </attribute>
+    </optional>
+    <optional>
       <attribute name="role">
         <data type="NMTOKEN" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
     </optional>
     <zeroOrMore>
-      <attribute>
-        <anyName>
-          <except>
-            <nsName ns="http://projectmallard.org/1.0/"/>
-            <nsName ns=""/>
-          </except>
-        </anyName>
-        <text/>
-      </attribute>
+      <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
-  </element>
+  </group>
+</define>
+
+<define name="mal_info_title_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_info_license">
   <element name="license">
+    <ref name="mal_info_license_attr"/>
+    <oneOrMore>
+      <ref name="mal_info_license_content"/>
+    </oneOrMore>
+  </element>
+</define>
+
+<define name="mal_info_license_attr">
+  <group>
+    <optional>
+      <attribute name="style">
+        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+      </attribute>
+    </optional>
     <optional>
       <attribute name="href">
         <text/>
       </attribute>
     </optional>
     <zeroOrMore>
-      <attribute>
-        <anyName>
-          <except>
-            <nsName ns="http://projectmallard.org/1.0/"/>
-            <nsName ns=""/>
-          </except>
-        </anyName>
-        <text/>
-      </attribute>
+      <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <oneOrMore>
-      <ref name="mal_block"/>
-    </oneOrMore>
-  </element>
+  </group>
+</define>
+
+<define name="mal_info_license_content">
+  <ref name="mal_block"/>
 </define>
 
 <define name="mal_info_desc">
   <element name="desc">
-    <zeroOrMore>
-      <attribute>
-        <anyName>
-          <except>
-            <nsName ns="http://projectmallard.org/1.0/"/>
-            <nsName ns=""/>
-          </except>
-        </anyName>
-        <text/>
+    <ref name="mal_info_desc_attr"/>
+    <ref name="mal_info_desc_inline"/>
+  </element>
+</define>
+
+<define name="mal_info_desc_attr">
+  <group>
+    <optional>
+      <attribute name="style">
+        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
+    </optional>
+    <zeroOrMore>
+      <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
-  </element>
+  </group>
+</define>
+
+<define name="mal_info_desc_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_info_revision">
   <element name="revision">
+    <ref name="mal_info_revision_attr"/>
+    <optional>
+      <ref name="mal_block_title"/>
+    </optional>
+    <optional>
+      <ref name="mal_block_desc"/>
+    </optional>
+    <zeroOrMore>
+      <ref name="mal_info_revision_content"/>
+    </zeroOrMore>
+  </element>
+</define>
+
+<define name="mal_info_revision_attr">
+  <group>
+    <optional>
+      <attribute name="style">
+        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+      </attribute>
+    </optional>
     <optional>
       <attribute name="version">
         <text/>
@@ -262,132 +349,186 @@
     </optional>
     <optional>
       <attribute name="status">
-        <choice>
-          <value>stub</value>
-          <value>incomplete</value>
-          <value>draft</value>
-          <value>outdated</value>
-          <value>review</value>
-          <value>candidate</value>
-          <value>final</value>
-        </choice>
+        <data type="NMTOKEN" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
     </optional>
     <zeroOrMore>
-      <attribute>
-        <anyName>
-          <except>
-            <nsName ns="http://projectmallard.org/1.0/"/>
-            <nsName ns=""/>
-          </except>
-        </anyName>
-        <text/>
-      </attribute>
+      <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <optional>
-      <ref name="mal_block_title"/>
-    </optional>
-    <optional>
-      <ref name="mal_block_desc"/>
-    </optional>
-    <zeroOrMore>
-      <ref name="mal_external"/>
-    </zeroOrMore>
-  </element>
+  </group>
+</define>
+
+<define name="mal_info_revision_content">
+  <ref name="mal_external"/>
 </define>
 
 <define name="mal_info_years">
   <element name="years">
-    <zeroOrMore>
-      <attribute>
-        <anyName>
-          <except>
-            <nsName ns="http://projectmallard.org/1.0/"/>
-            <nsName ns=""/>
-          </except>
-        </anyName>
-        <text/>
+    <ref name="mal_info_years_attr"/>
+    <ref name="mal_info_years_inline"/>
+  </element>
+</define>
+
+<define name="mal_info_years_attr">
+  <group>
+    <optional>
+      <attribute name="style">
+        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
+    </optional>
+    <zeroOrMore>
+      <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
-  </element>
+  </group>
+</define>
+
+<define name="mal_info_years_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_info_email">
   <element name="email">
-    <zeroOrMore>
-      <attribute>
-        <anyName>
-          <except>
-            <nsName ns="http://projectmallard.org/1.0/"/>
-            <nsName ns=""/>
-          </except>
-        </anyName>
-        <text/>
+    <ref name="mal_info_email_attr"/>
+    <ref name="mal_info_email_inline"/>
+  </element>
+</define>
+
+<define name="mal_info_email_attr">
+  <group>
+    <optional>
+      <attribute name="style">
+        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
+    </optional>
+    <zeroOrMore>
+      <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
-  </element>
+  </group>
+</define>
+
+<define name="mal_info_email_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_info_name">
   <element name="name">
-    <zeroOrMore>
-      <attribute>
-        <anyName>
-          <except>
-            <nsName ns="http://projectmallard.org/1.0/"/>
-            <nsName ns=""/>
-          </except>
-        </anyName>
-        <text/>
+    <ref name="mal_info_name_attr"/>
+    <ref name="mal_info_name_inline"/>
+  </element>
+</define>
+
+<define name="mal_info_name_attr">
+  <group>
+    <optional>
+      <attribute name="style">
+        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
+    </optional>
+    <zeroOrMore>
+      <ref name="mal_attr_external"/>
+    </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_info_name_inline">
+  <ref name="mal_inline"/>
+</define>
+
+<define name="mal_links">
+  <element name="links">
+    <ref name="mal_links_attr"/>
+    <optional>
+      <ref name="mal_block_title"/>
+    </optional>
+    <zeroOrMore>
+      <ref name="mal_links_content"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
   </element>
 </define>
 
-<define name="mal_block">
-  <choice>
-    <ref name="mal_block_basic"/>
-    <ref name="mal_block_formal"/>
-    <ref name="mal_block_lists"/>
-    <ref name="mal_table"/>
-  </choice>
+<define name="mal_links_attr">
+  <group>
+    <attribute name="type">
+      <data type="NMTOKEN" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+    </attribute>
+    <optional>
+      <attribute name="style">
+        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="groups">
+        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+      </attribute>
+    </optional>
+    <zeroOrMore>
+      <ref name="mal_attr_external"/>
+    </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_links_content">
+  <ref name="mal_external"/>
 </define>
 
-<define name="mal_block_basic">
+<define name="mal_block">
   <choice>
-    <ref name="mal_block_code"/>
-    <ref name="mal_block_example"/>
-    <ref name="mal_block_media"/>
-    <ref name="mal_block_p"/>
-    <ref name="mal_block_screen"/>
+    <ref name="mal_block_elements"/>
+    <element>
+      <anyName>
+        <except>
+          <nsName ns="http://projectmallard.org/1.0/"/>
+          <nsName ns=""/>
+        </except>
+      </anyName>
+      <zeroOrMore>
+        <attribute>
+          <anyName/>
+          <text/>
+        </attribute>
+      </zeroOrMore>
+      <interleave>
+        <zeroOrMore>
+          <ref name="mal_external"/>
+        </zeroOrMore>
+        <zeroOrMore>
+          <ref name="mal_block_elements"/>
+        </zeroOrMore>
+      </interleave>
+    </element>
   </choice>
 </define>
 
-<define name="mal_block_formal">
+<define name="mal_block_elements">
   <choice>
+    <ref name="mal_block_code"/>
     <ref name="mal_block_comment"/>
+    <ref name="mal_block_example"/>
     <ref name="mal_block_figure"/>
+    <ref name="mal_block_list"/>
     <ref name="mal_block_listing"/>
+    <ref name="mal_block_media"/>
     <ref name="mal_block_note"/>
+    <ref name="mal_block_p"/>
     <ref name="mal_block_quote"/>
-    <ref name="mal_block_synopsis"/>
-  </choice>
-</define>
-
-<define name="mal_block_lists">
-  <choice>
-    <ref name="mal_block_list"/>
+    <ref name="mal_block_screen"/>
     <ref name="mal_block_steps"/>
+    <ref name="mal_block_synopsis"/>
     <ref name="mal_block_terms"/>
     <ref name="mal_block_tree"/>
+    <ref name="mal_table"/>
   </choice>
 </define>
 
 <define name="mal_block_code">
   <element name="code">
+    <ref name="mal_block_code_attr"/>
+    <ref name="mal_block_code_inline"/>
+  </element>
+</define>
+
+<define name="mal_block_code_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -401,12 +542,24 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
-  </element>
+  </group>
+</define>
+
+<define name="mal_block_code_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_block_example">
   <element name="example">
+    <ref name="mal_block_example_attr"/>
+    <oneOrMore>
+      <ref name="mal_block_example_content"/>
+    </oneOrMore>
+  </element>
+</define>
+
+<define name="mal_block_example_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -415,14 +568,24 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <oneOrMore>
-      <ref name="mal_block"/>
-    </oneOrMore>
-  </element>
+  </group>
+</define>
+
+<define name="mal_block_example_content">
+  <ref name="mal_block"/>
 </define>
 
 <define name="mal_block_media">
   <element name="media">
+    <ref name="mal_block_media_attr"/>
+    <zeroOrMore>
+      <ref name="mal_block_media_content"/>
+    </zeroOrMore>
+  </element>
+</define>
+
+<define name="mal_block_media_attr">
+  <group>
     <optional>
       <attribute name="type">
         <choice>
@@ -434,6 +597,11 @@
       </attribute>
     </optional>
     <optional>
+      <attribute name="style">
+        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+      </attribute>
+    </optional>
+    <optional>
       <attribute name="mime">
         <text/>
       </attribute>
@@ -451,22 +619,25 @@
         <text/>
       </attribute>
     </optional>
-    <optional>
-      <attribute name="style">
-        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
-      </attribute>
-    </optional>
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <zeroOrMore>
-      <ref name="mal_block"/>
-    </zeroOrMore>
-  </element>
+  </group>
+</define>
+
+<define name="mal_block_media_content">
+  <ref name="mal_block"/>
 </define>
 
 <define name="mal_block_p">
   <element name="p">
+    <ref name="mal_block_p_attr"/>
+    <ref name="mal_block_p_inline"/>
+  </element>
+</define>
+
+<define name="mal_block_p_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -475,12 +646,22 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
-  </element>
+  </group>
+</define>
+
+<define name="mal_block_p_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_block_screen">
   <element name="screen">
+    <ref name="mal_block_screen_attr"/>
+    <ref name="mal_block_screen_inline"/>
+  </element>
+</define>
+
+<define name="mal_block_screen_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -494,32 +675,30 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
-  </element>
+  </group>
+</define>
+
+<define name="mal_block_screen_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_block_quote">
   <element name="quote">
+    <ref name="mal_block_quote_attr"/>
     <optional>
-      <attribute name="style">
-        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
-      </attribute>
+      <ref name="mal_block_title"/>
     </optional>
-    <zeroOrMore>
-      <ref name="mal_attr_external"/>
-    </zeroOrMore>
     <optional>
-      <ref name="mal_block_title"/>
+      <ref name="mal_block_cite"/>
     </optional>
-    <ref name="mal_block_cite"/>
     <oneOrMore>
-      <ref name="mal_block"/>
+      <ref name="mal_block_quote_content"/>
     </oneOrMore>
   </element>
 </define>
 
-<define name="mal_block_comment">
-  <element name="comment">
+<define name="mal_block_quote_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -528,18 +707,30 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_block_quote_content">
+  <ref name="mal_block"/>
+</define>
+
+<define name="mal_block_comment">
+  <element name="comment">
+    <ref name="mal_block_comment_attr"/>
     <optional>
       <ref name="mal_block_title"/>
     </optional>
-    <ref name="mal_block_cite"/>
+    <optional>
+      <ref name="mal_block_cite"/>
+    </optional>
     <oneOrMore>
-      <ref name="mal_block"/>
+      <ref name="mal_block_comment_content"/>
     </oneOrMore>
   </element>
 </define>
 
-<define name="mal_block_figure">
-  <element name="figure">
+<define name="mal_block_comment_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -548,6 +739,16 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_block_comment_content">
+  <ref name="mal_block"/>
+</define>
+
+<define name="mal_block_figure">
+  <element name="figure">
+    <ref name="mal_block_figure_attr"/>
     <optional>
       <ref name="mal_block_title"/>
     </optional>
@@ -555,13 +756,13 @@
       <ref name="mal_block_desc"/>
     </optional>
     <oneOrMore>
-      <ref name="mal_block"/>
+      <ref name="mal_block_figure_content"/>
     </oneOrMore>
   </element>
 </define>
 
-<define name="mal_block_listing">
-  <element name="listing">
+<define name="mal_block_figure_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -570,6 +771,16 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_block_figure_content">
+  <ref name="mal_block"/>
+</define>
+
+<define name="mal_block_listing">
+  <element name="listing">
+    <ref name="mal_block_listing_attr"/>
     <optional>
       <ref name="mal_block_title"/>
     </optional>
@@ -577,13 +788,13 @@
       <ref name="mal_block_desc"/>
     </optional>
     <oneOrMore>
-      <ref name="mal_block"/>
+      <ref name="mal_block_listing_content"/>
     </oneOrMore>
   </element>
 </define>
 
-<define name="mal_block_note">
-  <element name="note">
+<define name="mal_block_listing_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -592,17 +803,27 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_block_listing_content">
+  <ref name="mal_block"/>
+</define>
+
+<define name="mal_block_note">
+  <element name="note">
+    <ref name="mal_block_note_attr"/>
     <optional>
       <ref name="mal_block_title"/>
     </optional>
     <oneOrMore>
-      <ref name="mal_block"/>
+      <ref name="mal_block_note_content"/>
     </oneOrMore>
   </element>
 </define>
 
-<define name="mal_block_synopsis">
-  <element name="synopsis">
+<define name="mal_block_note_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -611,6 +832,16 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_block_note_content">
+  <ref name="mal_block"/>
+</define>
+
+<define name="mal_block_synopsis">
+  <element name="synopsis">
+    <ref name="mal_block_synopsis_attr"/>
     <optional>
       <ref name="mal_block_title"/>
     </optional>
@@ -618,18 +849,13 @@
       <ref name="mal_block_desc"/>
     </optional>
     <oneOrMore>
-      <ref name="mal_block"/>
+      <ref name="mal_block_synopsis_content"/>
     </oneOrMore>
   </element>
 </define>
 
-<define name="mal_block_list">
-  <element name="list">
-    <optional>
-      <attribute name="type">
-        <data type="NMTOKEN" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
-      </attribute>
-    </optional>
+<define name="mal_block_synopsis_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -638,6 +864,16 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_block_synopsis_content">
+  <ref name="mal_block"/>
+</define>
+
+<define name="mal_block_list">
+  <element name="list">
+    <ref name="mal_block_list_attr"/>
     <optional>
       <ref name="mal_block_title"/>
     </optional>
@@ -647,8 +883,13 @@
   </element>
 </define>
 
-<define name="mal_block_list_item">
-  <element name="item">
+<define name="mal_block_list_attr">
+  <group>
+    <optional>
+      <attribute name="type">
+        <data type="NMTOKEN" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+      </attribute>
+    </optional>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -657,14 +898,20 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_block_list_item">
+  <element name="item">
+    <ref name="mal_block_list_item_attr"/>
     <oneOrMore>
-      <ref name="mal_block"/>
+      <ref name="mal_block_list_item_content"/>
     </oneOrMore>
   </element>
 </define>
 
-<define name="mal_block_terms">
-  <element name="terms">
+<define name="mal_block_list_item_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -673,17 +920,27 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_block_list_item_content">
+  <ref name="mal_block"/>
+</define>
+
+<define name="mal_block_steps">
+  <element name="steps">
+    <ref name="mal_block_steps_attr"/>
     <optional>
       <ref name="mal_block_title"/>
     </optional>
     <oneOrMore>
-      <ref name="mal_block_terms_item"/>
+      <ref name="mal_block_steps_item"/>
     </oneOrMore>
   </element>
 </define>
 
-<define name="mal_block_terms_item">
-  <element name="item">
+<define name="mal_block_steps_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -692,17 +949,20 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_block_steps_item">
+  <element name="item">
+    <ref name="mal_block_steps_item_attr"/>
     <oneOrMore>
-      <ref name="mal_block_title"/>
-    </oneOrMore>
-    <oneOrMore>
-      <ref name="mal_block"/>
+      <ref name="mal_block_steps_item_content"/>
     </oneOrMore>
   </element>
 </define>
 
-<define name="mal_block_steps">
-  <element name="steps">
+<define name="mal_block_steps_item_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -711,17 +971,27 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_block_steps_item_content">
+  <ref name="mal_block"/>
+</define>
+
+<define name="mal_block_terms">
+  <element name="terms">
+    <ref name="mal_block_terms_attr"/>
     <optional>
       <ref name="mal_block_title"/>
     </optional>
     <oneOrMore>
-      <ref name="mal_block_steps_item"/>
+      <ref name="mal_block_terms_item"/>
     </oneOrMore>
   </element>
 </define>
 
-<define name="mal_block_steps_item">
-  <element name="item">
+<define name="mal_block_terms_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -730,14 +1000,23 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_block_terms_item">
+  <element name="item">
+    <ref name="mal_block_terms_item_attr"/>
+    <oneOrMore>
+      <ref name="mal_block_title"/>
+    </oneOrMore>
     <oneOrMore>
-      <ref name="mal_block"/>
+      <ref name="mal_block_terms_item_content"/>
     </oneOrMore>
   </element>
 </define>
 
-<define name="mal_block_tree">
-  <element name="tree">
+<define name="mal_block_terms_item_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -746,6 +1025,16 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_block_terms_item_content">
+  <ref name="mal_block"/>
+</define>
+
+<define name="mal_block_tree">
+  <element name="tree">
+    <ref name="mal_block_tree_attr"/>
     <optional>
       <ref name="mal_block_title"/>
     </optional>
@@ -755,8 +1044,8 @@
   </element>
 </define>
 
-<define name="mal_block_tree_item">
-  <element name="item">
+<define name="mal_block_tree_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -765,172 +1054,288 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
+  </group>
+</define>
+
+<define name="mal_block_tree_item">
+  <element name="item">
+    <ref name="mal_block_tree_item_attr"/>
+    <ref name="mal_block_tree_item_inline"/>
     <zeroOrMore>
       <ref name="mal_block_tree_item"/>
     </zeroOrMore>
   </element>
 </define>
 
-<define name="mal_table_col">
-  <element name="col">
+<define name="mal_block_tree_item_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
     </optional>
     <zeroOrMore>
-      <attribute>
-        <anyName>
-          <except>
-            <nsName ns="http://projectmallard.org/1.0/"/>
-            <nsName ns=""/>
-          </except>
-        </anyName>
-        <text/>
-      </attribute>
+      <ref name="mal_attr_external"/>
     </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_block_tree_item_inline">
+  <ref name="mal_inline"/>
+</define>
+
+<define name="mal_table">
+  <element name="table">
+    <ref name="mal_table_attr"/>
+    <optional>
+      <ref name="mal_block_title"/>
+    </optional>
+    <optional>
+      <ref name="mal_block_desc"/>
+    </optional>
+    <optional>
+      <choice>
+        <oneOrMore>
+          <ref name="mal_table_col"/>
+        </oneOrMore>
+        <oneOrMore>
+          <ref name="mal_table_colgroup"/>
+        </oneOrMore>
+      </choice>
+    </optional>
+    <choice>
+      <oneOrMore>
+        <ref name="mal_table_tr"/>
+      </oneOrMore>
+      <group>
+        <optional>
+          <ref name="mal_table_thead"/>
+        </optional>
+        <oneOrMore>
+          <ref name="mal_table_tbody"/>
+        </oneOrMore>
+        <optional>
+          <ref name="mal_table_tfoot"/>
+        </optional>
+      </group>
+    </choice>
   </element>
 </define>
 
-<define name="mal_table_colgroup">
-  <element name="colgroup">
+<define name="mal_table_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
     </optional>
+    <optional>
+      <attribute name="frame">
+        <choice>
+          <value>all</value>
+          <value>none</value>
+          <list>
+            <zeroOrMore>
+              <choice>
+                <value>top</value>
+                <value>bottom</value>
+                <value>left</value>
+                <value>right</value>
+              </choice>
+            </zeroOrMore>
+          </list>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="rules">
+        <choice>
+          <value>all</value>
+          <value>groups</value>
+          <value>none</value>
+          <list>
+            <zeroOrMore>
+              <choice>
+                <value>rows</value>
+                <value>rowgroups</value>
+                <value>cols</value>
+                <value>colgroups</value>
+              </choice>
+            </zeroOrMore>
+          </list>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="shade">
+        <choice>
+          <value>all</value>
+          <value>groups</value>
+          <value>none</value>
+          <list>
+            <zeroOrMore>
+              <choice>
+                <value>rows</value>
+                <value>rowgroups</value>
+                <value>cols</value>
+                <value>colgroups</value>
+              </choice>
+            </zeroOrMore>
+          </list>
+        </choice>
+      </attribute>
+    </optional>
     <zeroOrMore>
-      <attribute>
-        <anyName>
-          <except>
-            <nsName ns="http://projectmallard.org/1.0/"/>
-            <nsName ns=""/>
-          </except>
-        </anyName>
-        <text/>
+      <ref name="mal_attr_external"/>
+    </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_table_col">
+  <element name="col">
+    <ref name="mal_table_col_attr"/>
+  </element>
+</define>
+
+<define name="mal_table_col_attr">
+  <group>
+    <optional>
+      <attribute name="style">
+        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
+    </optional>
+    <zeroOrMore>
+      <ref name="mal_attr_external"/>
     </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_table_colgroup">
+  <element name="colgroup">
+    <ref name="mal_table_colgroup_attr"/>
     <zeroOrMore>
       <ref name="mal_table_col"/>
     </zeroOrMore>
   </element>
 </define>
 
-<define name="mal_table_tr">
-  <element name="tr">
+<define name="mal_table_colgroup_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
     </optional>
     <zeroOrMore>
-      <attribute>
-        <anyName>
-          <except>
-            <nsName ns="http://projectmallard.org/1.0/"/>
-            <nsName ns=""/>
-          </except>
-        </anyName>
-        <text/>
-      </attribute>
+      <ref name="mal_attr_external"/>
     </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_table_tr">
+  <element name="tr">
+    <ref name="mal_table_tr_attr"/>
     <zeroOrMore>
       <ref name="mal_table_td"/>
     </zeroOrMore>
   </element>
 </define>
 
-<define name="mal_table_thead">
-  <element name="thead">
+<define name="mal_table_tr_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
     </optional>
     <zeroOrMore>
-      <attribute>
-        <anyName>
-          <except>
-            <nsName ns="http://projectmallard.org/1.0/"/>
-            <nsName ns=""/>
-          </except>
-        </anyName>
-        <text/>
-      </attribute>
+      <ref name="mal_attr_external"/>
     </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_table_thead">
+  <element name="thead">
+    <ref name="mal_table_thead_attr"/>
     <oneOrMore>
       <ref name="mal_table_tr"/>
     </oneOrMore>
   </element>
 </define>
 
-<define name="mal_table_tbody">
-  <element name="tbody">
+<define name="mal_table_thead_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
     </optional>
     <zeroOrMore>
-      <attribute>
-        <anyName>
-          <except>
-            <nsName ns="http://projectmallard.org/1.0/"/>
-            <nsName ns=""/>
-          </except>
-        </anyName>
-        <text/>
-      </attribute>
+      <ref name="mal_attr_external"/>
     </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_table_tbody">
+  <element name="tbody">
+    <ref name="mal_table_tbody_attr"/>
     <oneOrMore>
       <ref name="mal_table_tr"/>
     </oneOrMore>
   </element>
 </define>
 
-<define name="mal_table_tfoot">
-  <element name="tfoot">
+<define name="mal_table_tbody_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
     </optional>
     <zeroOrMore>
-      <attribute>
-        <anyName>
-          <except>
-            <nsName ns="http://projectmallard.org/1.0/"/>
-            <nsName ns=""/>
-          </except>
-        </anyName>
-        <text/>
-      </attribute>
+      <ref name="mal_attr_external"/>
     </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_table_tfoot">
+  <element name="tfoot">
+    <ref name="mal_table_tfoot_attr"/>
     <oneOrMore>
       <ref name="mal_table_tr"/>
     </oneOrMore>
   </element>
 </define>
 
-<define name="mal_table_td">
-  <element name="td">
+<define name="mal_table_tfoot_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
     </optional>
     <zeroOrMore>
-      <attribute>
-        <anyName>
-          <except>
-            <nsName ns="http://projectmallard.org/1.0/"/>
-            <nsName ns=""/>
-          </except>
-        </anyName>
-        <text/>
-      </attribute>
+      <ref name="mal_attr_external"/>
     </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_table_td">
+  <element name="td">
+    <ref name="mal_table_td_attr"/>
+    <oneOrMore>
+      <ref name="mal_table_td_content"/>
+    </oneOrMore>
+  </element>
+</define>
+
+<define name="mal_table_td_attr">
+  <group>
+    <optional>
+      <attribute name="style">
+        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+      </attribute>
+    </optional>
     <optional>
       <attribute name="rowspan">
         <text/>
@@ -941,161 +1346,102 @@
         <text/>
       </attribute>
     </optional>
-    <oneOrMore>
-      <ref name="mal_block"/>
-    </oneOrMore>
+    <zeroOrMore>
+      <ref name="mal_attr_external"/>
+    </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_table_td_content">
+  <ref name="mal_block"/>
+</define>
+
+<define name="mal_block_title">
+  <element name="title">
+    <ref name="mal_block_title_attr"/>
+    <ref name="mal_block_title_inline"/>
   </element>
 </define>
 
-<define name="mal_table">
-  <element name="table">
+<define name="mal_block_title_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
     </optional>
     <zeroOrMore>
-      <attribute>
-        <anyName>
-          <except>
-            <nsName ns="http://projectmallard.org/1.0/"/>
-            <nsName ns=""/>
-          </except>
-        </anyName>
-        <text/>
-      </attribute>
+      <ref name="mal_attr_external"/>
     </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_block_title_inline">
+  <ref name="mal_inline"/>
+</define>
+
+<define name="mal_block_subtitle">
+  <element name="subtitle">
+    <ref name="mal_block_subtitle_attr"/>
+    <ref name="mal_block_subtitle_inline"/>
+  </element>
+</define>
+
+<define name="mal_block_subtitle_attr">
+  <group>
     <optional>
-      <attribute name="frame">
-        <choice>
-          <value>all</value>
-          <value>none</value>
-          <list>
-            <zeroOrMore>
-              <choice>
-                <value>top</value>
-                <value>bottom</value>
-                <value>left</value>
-                <value>right</value>
-              </choice>
-            </zeroOrMore>
-          </list>
-        </choice>
-      </attribute>
-    </optional>
-    <optional>
-      <attribute name="rules">
-        <choice>
-          <value>all</value>
-          <value>groups</value>
-          <value>none</value>
-          <list>
-            <zeroOrMore>
-              <choice>
-                <value>rows</value>
-                <value>rowgroups</value>
-                <value>cols</value>
-                <value>colgroups</value>
-              </choice>
-            </zeroOrMore>
-          </list>
-        </choice>
-      </attribute>
-    </optional>
-    <optional>
-      <attribute name="shade">
-        <choice>
-          <value>all</value>
-          <value>groups</value>
-          <value>none</value>
-          <list>
-            <zeroOrMore>
-              <choice>
-                <value>rows</value>
-                <value>rowgroups</value>
-                <value>cols</value>
-                <value>colgroups</value>
-              </choice>
-            </zeroOrMore>
-          </list>
-        </choice>
+      <attribute name="style">
+        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
     </optional>
-    <optional>
-      <ref name="mal_block_title"/>
-    </optional>
-    <optional>
-      <ref name="mal_block_desc"/>
-    </optional>
-    <optional>
-      <choice>
-        <oneOrMore>
-          <ref name="mal_table_col"/>
-        </oneOrMore>
-        <oneOrMore>
-          <ref name="mal_table_colgroup"/>
-        </oneOrMore>
-      </choice>
-    </optional>
-    <choice>
-      <oneOrMore>
-        <ref name="mal_table_tr"/>
-      </oneOrMore>
-      <group>
-        <optional>
-          <ref name="mal_table_thead"/>
-        </optional>
-        <oneOrMore>
-          <ref name="mal_table_tbody"/>
-        </oneOrMore>
-        <optional>
-          <ref name="mal_table_tfoot"/>
-        </optional>
-      </group>
-    </choice>
-  </element>
+    <zeroOrMore>
+      <ref name="mal_attr_external"/>
+    </zeroOrMore>
+  </group>
+</define>
+
+<define name="mal_block_subtitle_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_block_desc">
   <element name="desc">
+    <ref name="mal_block_desc_attr"/>
+    <ref name="mal_block_desc_inline"/>
+  </element>
+</define>
+
+<define name="mal_block_desc_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
     </optional>
     <zeroOrMore>
-      <attribute>
-        <anyName>
-          <except>
-            <nsName ns="http://projectmallard.org/1.0/"/>
-            <nsName ns=""/>
-          </except>
-        </anyName>
-        <text/>
-      </attribute>
+      <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
-  </element>
+  </group>
+</define>
+
+<define name="mal_block_desc_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_block_cite">
   <element name="cite">
+    <ref name="mal_block_cite_attr"/>
+    <ref name="mal_block_cite_inline"/>
+  </element>
+</define>
+
+<define name="mal_block_cite_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
     </optional>
-    <zeroOrMore>
-      <attribute>
-        <anyName>
-          <except>
-            <nsName ns="http://projectmallard.org/1.0/"/>
-            <nsName ns=""/>
-          </except>
-        </anyName>
-        <text/>
-      </attribute>
-    </zeroOrMore>
     <optional>
       <attribute name="date">
         <text/>
@@ -1106,20 +1452,14 @@
         <text/>
       </attribute>
     </optional>
-    <ref name="mal_inline"/>
-  </element>
-</define>
-
-<define name="mal_block_subtitle">
-  <element name="subtitle">
-    <ref name="mal_inline"/>
-  </element>
+    <zeroOrMore>
+      <ref name="mal_attr_external"/>
+    </zeroOrMore>
+  </group>
 </define>
 
-<define name="mal_block_title">
-  <element name="title">
-    <ref name="mal_inline"/>
-  </element>
+<define name="mal_block_cite_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_inline">
@@ -1180,6 +1520,12 @@
             <nsName ns=""/>
           </except>
         </anyName>
+        <zeroOrMore>
+          <attribute>
+            <anyName/>
+            <text/>
+          </attribute>
+        </zeroOrMore>
         <ref name="mal_inline"/>
       </element>
     </zeroOrMore>
@@ -1191,9 +1537,16 @@
 
 <define name="mal_inline_app">
   <element name="app">
-    <optional>
+    <ref name="mal_inline_app_attr"/>
+    <ref name="mal_inline_app_inline"/>
+  </element>
+</define>
+
+<define name="mal_inline_app_attr">
+  <group>
+    <zeroOrMore>
       <ref name="mal_attr_link"/>
-    </optional>
+    </zeroOrMore>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -1202,15 +1555,25 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
-  </element>
+  </group>
+</define>
+
+<define name="mal_inline_app_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_inline_code">
   <element name="code">
-    <optional>
+    <ref name="mal_inline_code_attr"/>
+    <ref name="mal_inline_code_inline"/>
+  </element>
+</define>
+
+<define name="mal_inline_code_attr">
+  <group>
+    <zeroOrMore>
       <ref name="mal_attr_link"/>
-    </optional>
+    </zeroOrMore>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -1224,15 +1587,25 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
-  </element>
+  </group>
+</define>
+
+<define name="mal_inline_code_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_inline_cmd">
   <element name="cmd">
-    <optional>
+    <ref name="mal_inline_cmd_attr"/>
+    <ref name="mal_inline_cmd_inline"/>
+  </element>
+</define>
+
+<define name="mal_inline_cmd_attr">
+  <group>
+    <zeroOrMore>
       <ref name="mal_attr_link"/>
-    </optional>
+    </zeroOrMore>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -1246,15 +1619,25 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
-  </element>
+  </group>
+</define>
+
+<define name="mal_inline_cmd_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_inline_output">
   <element name="output">
-    <optional>
+    <ref name="mal_inline_output_attr"/>
+    <ref name="mal_inline_output_inline"/>
+  </element>
+</define>
+
+<define name="mal_inline_output_attr">
+  <group>
+    <zeroOrMore>
       <ref name="mal_attr_link"/>
-    </optional>
+    </zeroOrMore>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -1263,15 +1646,25 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
-  </element>
+  </group>
+</define>
+
+<define name="mal_inline_output_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_inline_em">
   <element name="em">
-    <optional>
+    <ref name="mal_inline_em_attr"/>
+    <ref name="mal_inline_em_inline"/>
+  </element>
+</define>
+
+<define name="mal_inline_em_attr">
+  <group>
+    <zeroOrMore>
       <ref name="mal_attr_link"/>
-    </optional>
+    </zeroOrMore>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -1280,15 +1673,25 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
-  </element>
+  </group>
+</define>
+
+<define name="mal_inline_em_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_inline_file">
   <element name="file">
-    <optional>
+    <ref name="mal_inline_file_attr"/>
+    <ref name="mal_inline_file_inline"/>
+  </element>
+</define>
+
+<define name="mal_inline_file_attr">
+  <group>
+    <zeroOrMore>
       <ref name="mal_attr_link"/>
-    </optional>
+    </zeroOrMore>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -1297,15 +1700,25 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
-  </element>
+  </group>
+</define>
+
+<define name="mal_inline_file_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_inline_gui">
   <element name="gui">
-    <optional>
+    <ref name="mal_inline_gui_attr"/>
+    <ref name="mal_inline_gui_inline"/>
+  </element>
+</define>
+
+<define name="mal_inline_gui_attr">
+  <group>
+    <zeroOrMore>
       <ref name="mal_attr_link"/>
-    </optional>
+    </zeroOrMore>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -1314,12 +1727,22 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
-  </element>
+  </group>
+</define>
+
+<define name="mal_inline_gui_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_inline_guiseq">
   <element name="guiseq">
+    <ref name="mal_inline_guiseq_attr"/>
+    <ref name="mal_inline_guiseq_inline"/>
+  </element>
+</define>
+
+<define name="mal_inline_guiseq_attr">
+  <group>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -1328,59 +1751,62 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <mixed>
-      <oneOrMore>
-        <ref name="mal_inline_gui"/>
-      </oneOrMore>
-    </mixed>
-  </element>
+  </group>
+</define>
+
+<define name="mal_inline_guiseq_inline">
+  <interleave>
+    <oneOrMore>
+      <ref name="mal_inline_gui"/>
+    </oneOrMore>
+    <text/>
+  </interleave>
 </define>
 
 <define name="mal_inline_link">
   <element name="link">
-    <choice>
-      <attribute name="xref">
-        <text/>
-      </attribute>
-      <attribute name="href">
-        <text/>
-      </attribute>
-      <group>
-        <attribute name="xref">
-          <text/>
-        </attribute>
-        <attribute name="href">
-          <text/>
-        </attribute>
-      </group>
-    </choice>
+    <ref name="mal_inline_link_attr"/>
+    <ref name="mal_inline_link_inline"/>
+  </element>
+</define>
+
+<define name="mal_inline_link_attr">
+  <group>
+    <oneOrMore>
+      <ref name="mal_attr_link"/>
+    </oneOrMore>
     <optional>
-      <attribute name="role">
-        <text/>
+      <attribute name="style">
+        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
       </attribute>
     </optional>
     <optional>
-      <attribute name="style">
-        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+      <attribute name="role">
+        <text/>
       </attribute>
     </optional>
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
-  </element>
+  </group>
+</define>
+
+<define name="mal_inline_link_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_inline_media">
   <element name="media">
-    <optional>
+    <ref name="mal_inline_media_attr"/>
+    <ref name="mal_inline_media_inline"/>
+  </element>
+</define>
+
+<define name="mal_inline_media_attr">
+  <group>
+    <zeroOrMore>
       <ref name="mal_attr_link"/>
-    </optional>
-    <optional>
-      <attribute name="style">
-        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
-      </attribute>
-    </optional>
+    </zeroOrMore>
     <optional>
       <attribute name="type">
         <choice>
@@ -1392,6 +1818,11 @@
       </attribute>
     </optional>
     <optional>
+      <attribute name="style">
+        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+      </attribute>
+    </optional>
+    <optional>
       <attribute name="mime">
         <text/>
       </attribute>
@@ -1412,17 +1843,22 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
-  </element>
+  </group>
+</define>
+
+<define name="mal_inline_media_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_inline_keyseq">
   <element name="keyseq">
-    <optional>
-      <attribute name="style">
-        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
-      </attribute>
-    </optional>
+    <ref name="mal_inline_keyseq_attr"/>
+    <ref name="mal_inline_keyseq_inline"/>
+  </element>
+</define>
+
+<define name="mal_inline_keyseq_attr">
+  <group>
     <optional>
       <attribute name="type">
         <choice>
@@ -1431,25 +1867,41 @@
         </choice>
       </attribute>
     </optional>
+    <optional>
+      <attribute name="style">
+        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+      </attribute>
+    </optional>
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <mixed>
-      <zeroOrMore>
-        <choice>
-          <ref name="mal_inline_key"/>
-          <ref name="mal_inline_keyseq"/>
-        </choice>
-      </zeroOrMore>
-    </mixed>
-  </element>
+  </group>
+</define>
+
+<define name="mal_inline_keyseq_inline">
+  <interleave>
+    <oneOrMore>
+      <choice>
+        <ref name="mal_inline_key"/>
+        <ref name="mal_inline_keyseq"/>
+      </choice>
+    </oneOrMore>
+    <text/>
+  </interleave>
 </define>
 
 <define name="mal_inline_key">
   <element name="key">
-    <optional>
+    <ref name="mal_inline_key_attr"/>
+    <ref name="mal_inline_key_inline"/>
+  </element>
+</define>
+
+<define name="mal_inline_key_attr">
+  <group>
+    <zeroOrMore>
       <ref name="mal_attr_link"/>
-    </optional>
+    </zeroOrMore>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -1458,15 +1910,25 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
-  </element>
+  </group>
+</define>
+
+<define name="mal_inline_key_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_inline_span">
   <element name="span">
-    <optional>
+    <ref name="mal_inline_span_attr"/>
+    <ref name="mal_inline_span_inline"/>
+  </element>
+</define>
+
+<define name="mal_inline_span_attr">
+  <group>
+    <zeroOrMore>
       <ref name="mal_attr_link"/>
-    </optional>
+    </zeroOrMore>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -1475,15 +1937,25 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
-  </element>
+  </group>
+</define>
+
+<define name="mal_inline_span_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_inline_sys">
   <element name="sys">
-    <optional>
+    <ref name="mal_inline_sys_attr"/>
+    <ref name="mal_inline_sys_inline"/>
+  </element>
+</define>
+
+<define name="mal_inline_sys_attr">
+  <group>
+    <zeroOrMore>
       <ref name="mal_attr_link"/>
-    </optional>
+    </zeroOrMore>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -1492,15 +1964,25 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
-  </element>
+  </group>
+</define>
+
+<define name="mal_inline_sys_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_inline_input">
   <element name="input">
-    <optional>
+    <ref name="mal_inline_input_attr"/>
+    <ref name="mal_inline_input_inline"/>
+  </element>
+</define>
+
+<define name="mal_inline_input_attr">
+  <group>
+    <zeroOrMore>
       <ref name="mal_attr_link"/>
-    </optional>
+    </zeroOrMore>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -1509,15 +1991,25 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
-  </element>
+  </group>
+</define>
+
+<define name="mal_inline_input_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_inline_var">
   <element name="var">
-    <optional>
+    <ref name="mal_inline_var_attr"/>
+    <ref name="mal_inline_var_inline"/>
+  </element>
+</define>
+
+<define name="mal_inline_var_attr">
+  <group>
+    <zeroOrMore>
       <ref name="mal_attr_link"/>
-    </optional>
+    </zeroOrMore>
     <optional>
       <attribute name="style">
         <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
@@ -1526,8 +2018,11 @@
     <zeroOrMore>
       <ref name="mal_attr_external"/>
     </zeroOrMore>
-    <ref name="mal_inline"/>
-  </element>
+  </group>
+</define>
+
+<define name="mal_inline_var_inline">
+  <ref name="mal_inline"/>
 </define>
 
 <define name="mal_external">
@@ -1544,9 +2039,14 @@
         <text/>
       </attribute>
     </zeroOrMore>
-    <zeroOrMore>
-      <ref name="mal_anything"/>
-    </zeroOrMore>
+    <interleave>
+      <zeroOrMore>
+        <ref name="mal_anything"/>
+      </zeroOrMore>
+      <optional>
+        <text/>
+      </optional>
+    </interleave>
   </element>
 </define>
 
@@ -1559,9 +2059,14 @@
         <text/>
       </attribute>
     </zeroOrMore>
-    <zeroOrMore>
-      <ref name="mal_anything"/>
-    </zeroOrMore>
+    <interleave>
+      <zeroOrMore>
+        <ref name="mal_anything"/>
+      </zeroOrMore>
+      <optional>
+        <text/>
+      </optional>
+    </interleave>
   </element>
 </define>
 
@@ -1579,21 +2084,30 @@
 
 <define name="mal_attr_link">
   <choice>
+    <attribute name="xref">
+      <text/>
+    </attribute>
+    <attribute name="href">
+      <text/>
+    </attribute>
+    <attribute name="action">
+      <text/>
+    </attribute>
+  </choice>
+</define>
+
+<define name="mal_attr_mal_link">
+  <group>
     <optional>
-      <attribute name="xref">
-        <text/>
-      </attribute>
-    </optional>
-    <optional>
-      <attribute name="dref">
+      <attribute name="mal:xref">
         <text/>
       </attribute>
     </optional>
     <optional>
-      <attribute name="href">
+      <attribute name="mal:action">
         <text/>
       </attribute>
     </optional>
-  </choice>
+  </group>
 </define>
 </grammar>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]