The following, in no particular order, highlights the differences between SGML and MGML
Markup syntax is concrete, not abstract. No minimization of any kind is allowed except for the omission of attributes with default values.
PI's are allowed, with no effect on the parsing.
Markup Declaration in MGML is done using a Document Structure Definition, which differs from SGML markup declarations in that
A DSD is somewhat more strict in its layout than a DTD - all Entities and Notations must be declared first, in any old order, then all Elements and Attributes.
The structure of a DSD is defined by the "Reference DSD".
Entities are either STRING or EXTERNAL. String entities are specified as a sequence of literal strings and numeric character specifications. External entities may be SYSTEM or PUBLIC, as with SGML; the identifiers work the same. All entities are assumed to be parsable unless marked as NDATA; there is no notion of CDATA or SDATA entities. There are no PI entities. There are no bracketed text entities.
There are no parameter entities, since the language and metalanguage are unified.
MGML does not use capacities; item lengths and nesting depths may be adjusted to meet the needs of the application.
Elements are much as in SGML, except that the AND connector in content models is dropped.
There are no exclusions or inclusions.
There is no notion of CDATA or RCDATA content.
All of the SGML attribute types are supported except for ENTITY, ENTITIES, CURRENT and CONREF.
Notation declaration and reference works as in SGML
SUBDOC, Marked sections, CONCUR, LINK, SHORTREF, DATATAG.
Markup Declarations - how to link them to documents without breaking an 8879 parser?