[Nachtrag:]
? steht fuer optional, also 0|1 und das betrifft sowohl die ExternalID als auch das interne Subset fuer eine DTD-Erweiterung.
Der Hinweis von Daniel auf [75] macht es dann noch klarer, also zwingend PublicID und SystemID, wenn PUBLIC verwendet wird.
MfG, Thomas