Activity Report 9, XML Project

2005-03-28
XML Project

by Yushi KOMACHI



1. Overview of the activity

Regarding the topic of XML, the last ITSIG Plenary instructed that:

-------------------------
ITSIG,

invites the JTC1 representative in ITSIG to secure coordination among the project team led by Dr. Komachi and the JTC1 SCs interested in authoring XML documents, with the aim of developing a harmonized approach to be followed by interested ISO technical groups,

further invites Dr. Komachi and JISC to provide additional information and guidance to support the implementation of ISO/IEC TR 9573-11:2004,

confirms the approach followed so far by ITSIG on XML authoring, i.e:

to continue with the pilot project lead by Dr. Komachi in collaboration with ISO/CS and JTC1, aiming at consolidating an ISO/XML DTD and related style specification to be used by those technical groups interested in generating document files in XML format.
-------------------------

Responding to the resolution, the XML project provided the XML DTD of ISO/IEC 9573-11 2nd edition for some project editors of JTC1, who are XML experts as well. They tried to draft their standards documents using the DTD and found that

The DTD of ISO/IEC 9573-11 2nd edition is actually designed satisfying the requirements for ISO/CS as well as project editors.

Considering the comment of project editors, the XML project is developing a simplified XML structure which could be appropriate for project editors' works and should be distributed as an amendment to ISO/IEC TR 9573-11 2nd ed.

Y. Komachi of the XML Project visited to Geneva in Dec. 2004 and held an adhoc meeting with Mr. Gerundino and some members of ISO/CS to clarify the works to be taken for XML promotion.

2. Simplified XML structure for project editors

The simplified XML structure is basically an extension to the prototype structure[1] by James Clark and is described using the compact syntax[3] of RELAX NG[2].

The following elements are extended:

The simplified XML structure is:

namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"

include "is.rnc"

head |=
 element head {
    element organization { "ISO" | "ISO/IEC" } 	# sourceod
    & element document-type {			# type
        "International Standard"
        | "Technical Report"
        | "Guide"
        | "Publicly Available Specification"
        | "Technical Specification"
        | "International Standardized Profile"
      }
    & element stage {				# status
        "committee" | "enquiry" | "approval" | "publication"
      }
    & element tc-number { positive-integer }
    & element tc-name { text }
    & (element sc-number { positive-integer }
       & element sc-name { text })?
    & element wg-number { positive-integer }?		# wdnumber
    & element serial-number { positive-integer }?
    & element draft-number { positive-integer }?
    & element document-number { positive-integer }	# number
    & element part-number { positive-integer }?		# part
    & element document-language { "E" | "F" }		# language
    & element secretariat { "ANSI" }
    & element date { xsd:date }
    & element title {
	attribute langcode { "E" | "F" }?,		# for multilingual title
        element introductory { text }?,
        element main { text },
        element complementary { text }?
      }+
  }

body |=
  foreword,					# foreword
  introduction?,				# intro
  warning?,					# warning(!)
  scope,					# scope
  conf?,					# conf(!)
  normative-references?,			# refs
  terms-and-definitions?,			# defs
  titled-clause+,				# h1
  annex*,					# annexn or annexi
  bibliography?,				# annexbl
  index*					# index(!)

warning =
  element warning { attlist.warning, p* }
attlist.warning &=
  id,
  [ a:defaultValue = "warning" ]
  attribute format { "genwarn" | "warning" | "caution" | "remark" }?

conf =  element conf { titled-clause }

index = element index { attlist.index, text }
attlist.index &=
  id,
  attribute status { "informative" }?

foreword |= element foreword { block*, part-list? }

term-and-definition |=
  element term-and-definition {
    element term { text },
    element term {
      attribute status { text }?,
      text
    }*,
    element definition {
      attribute subject-field { text }?,
      inline
    },
    (example | note | warning )*
  }+

block |= p | ol | ul | notation-list
  | example | note | warning 
  | pre | float

float = { table | figure }
  
table = element table {id, attribute pgwide { yesorno }?, tabtitle?, block+ }
figure = element figure {id, attribute pgwide { yesorno }?, figtitle?, block+ }

yesorno = "yes" | "no"
tabular = element tabular { attrlist.tabular, tgroup }
attrlist.tabular &=
  attribute frame {
    "all" | "top" | "bottom" | "topbot" | "sides" | "none"
  }?,
  attribute colsep { yesorno }?,
  attribute rowsep { yesorno }?
tgroup =
  element tgroup {
    attlist.tgroup,
    colspec*,
    spanspec*,
    thead?,
    tfoot?,
    tbody
  }
attlist.tgroup &=
  attribute cols { xsd:NMTOKEN },
  attribute tgroupstyle { xsd:NMTOKEN }?,
  attribute colsep { yesorno }?,
  attribute rowsep { yesorno }?,
  [ a:defaultValue = "left" ]
  attribute align { "left" | "right" | "center" | "justify" }?,
colspec = element colspec { attlist.colspec }
attlist.colspec &=
  attribute colnum { xsd:NMTOKEN }?,
  attribute colname { xsd:NMTOKEN }?,
  attribute align { "left" | "right" | "center" | "justify" }?,
  attribute colsep { yesorno }?,
  attribute rowsep { yesorno }?
spanspec = element spanspec { attlist.spanspec }
attlist.spanspec &=
  attribute namest { xsd:NMTOKEN },
  attribute nameend { xsd:NMTOKEN },
  attribute spanname { xsd:NMTOKEN },
  [ a:defaultValue = "center" ]
  attribute align { "left" | "right" | "center" | "justify" }?,
  attribute colsep { yesorno }?,
  attribute rowsep { yesorno }?
thead = element thead { attlist.thead, colspec*, row+ }
tfoot = element tfoot { attlist.tfoot, colspec*, row+ }
attlist.thead &=
  [ a:defaultValue = "bottom" ]
  attribute valign { "top" | "middle" | "bottom" }?
attlist.tfoot &=
  [ a:defaultValue = "top" ]
  attribute valign { "top" | "middle" | "bottom" }?
tbody = element tbody { attlist.tbody, row+ }
attlist.tbody &=
  [ a:defaultValue = "top" ]
  attribute valign { "top" | "middle" | "bottom" }?
row = element row { attlist.row, entry+ }
attlist.row &=
  attribute rowsep { yesorno }?,
  attribute valign { "top" | "bottom" | "middle" }?
entry = element entry { attlist.entry, block* }
attlist.entry &=
  attribute colname { xsd:NMTOKEN }?,
  attribute namest { xsd:NMTOKEN }?,
  attribute nameend { xsd:NMTOKEN }?,
  attribute spanname { xsd:NMTOKEN }?,
  [ a:defaultValue = "0" ] attribute morerows { xsd:NMTOKEN }?,
  attribute colsep { yesorno }?,
  attribute rowsep { yesorno }?,
  attribute valign { "top" | "bottom" | "middle" }?,
  attribute align { "left" | "right" | "center" | "justify" }?

inline |=
  (text
   | element code | b | i | var { inline }
   | ref
   | firstterm
   | strong
   | artwork
   | tabular
   | sub | sup
   | footnote		# added footnote
  )*

artwork = element artwork { attlist.artwork }
attlist.artwork &=
  id,
  attribute entity { xsd:ENTITY },
  attribute align { xsd:NMTOKEN }?,
  attribute angle { text }?,
  attribute bloffset { text }?,
  attribute cropped { xsd:NMTOKEN }?,
  attribute float { xsd:NMTOKEN }?,
  attribute height { text }?,
  attribute nsoffset { text }?,
  attribute position { xsd:NMTOKEN }?,
  attribute width { text }?,
  attribute dpi { xsd:NMTOKEN }?,
  attribute impang { text }?,
  attribute impby { "ref" | "copy" }?,
  attribute impsize { text }?,
  attribute sideways { xsd:NMTOKEN }?,
  attribute xoffset { text }?,
  attribute yoffset { text }?

footnote = element footnote { id, (text | p)+ }

3. References