SGML and XML as (Meta-) Markup Languages
Both SGML and XML are "meta" languages because they are used for defining markup languages. A markup language defined using SGML or XML has a specific vocabulary (labels for elements and attributes) and a declared syntax (grammar defining the hierarchy and other features).
Conceived notionally in the 1960s - 1970s, the Standard Generalized Markup Language (SGML, ISO 8879:1986) gave birth to a profile/subset called the Extensible Markup Language (XML), published as a W3C Recommendation in 1998. Depending upon your perspective and requirements, the differences between SGML and XML are inconsequential or immense. SGML is more customizable (thus flexible and more "powerful") at the expense of being (much) more expensive to implement. In an SGML language you could say <COVER PAGES>, whereas in XML this construct could not be DTD valid. For an overview of differences, see James Clark's document "Comparison of SGML and XML"; for other treatments, see references in XML and/versus SGML. As of 2002-07, relatively few enterprise-level projects are started as SGML applications, but many SGML applications implemented before 1999 are still running productively. In some cases, peculiar business requirements favor the use of SGML for certain features that have been eliminated in XML.
Although interest has shifted massively toward XML, the Cover Pages retains a substantial collection of legacy information about SGML. The document providing General Information and Overviews for SGML includes references to online tutorials.
Other documents covering principally SGML topics include: