Markup codes categorize parts of a document; they do not tell what processing is to be carried out at particular points in a document (procedural markup).
In SGML, instructions needed to process a document for some particular purpose (for example, to format it) are sharply distinguished from the descriptive markup which occurs within the document. Usually, they are collected outside the document in separate procedures or programs.
Documents are regarded as having types, and these are expressed by document type definitions (DTD), which enforce markup for that document type.
SGML encoded documents should be transportable from one hardware and software environment to another without loss of information: platforms differ in character sets, file-naming conventions, interpretation of bytes...
SGML provides a general purpose mechanism for string substitution, that is, a simple machine-independent way of stating that a particular string of characters in the document should be replaced by some other string when the document is processed.