> However, if I
> care compatibility, I still prefer to embed internal DTD subsets rather
> than a PI or attribute. Does use of PIs or attributes have any
> advantages over use of internal subsets?
Internal subsets don't support namespaces properly.
Internal subsets can be quite unwieldly if you have large DTDs
(particularly if you have small instances). The size of the internal
subset may dwarf the size of the instance. You can of course include
declarations for just the elements used in the instance, but then you have
a maintenance problem: every time you add a new element you need to check
whether you need to add declarations.
There's also a fundamental difference: instead of having the schema in one
place and referencing it, you are duplicating the schema information in
multiple places. If you change the RELAX NG schema (for example, by adding
a new default attribute), the internal subset derived from it won't
automatically change, whereas if you used a PI, then you wouldn't have to
change anything if you changed the schema.
James