The answer can be looked for in Charles Goldfarb's SGML Handbook.
You can declare an entity reference to an external SGML file and then
"include" it. You can also make references to data stored in an external
format using the NONSGML and NOTATION keywords. There are mechanisms for
"public" identifiers (similar to URNs but run by the ISO and probably
unsuitable for widespread use in the Internet), and "system" identifiers
supposedly for local files. The "proper" SGML approach forces you to declare
all such references and to then use local names in subsequent markup. HTML of
course flouts this by including the URL directly in the elements defining
hypertext links.
In general SGML is quite a weak specification language, and not as good
as simple BNF grammar formalisms. The supposed ability to use common SGML
parsers to interchange document formats is dependent on the formats involved
having closely matching semantic models. The SGML standard makes some
provision for including procedural information but this is not present in
the DTD's for each format. In other words, you still need to write a "program"
to relate features in each format.
Dave