HTML type declaration of a document is formally an SGML construct defined in the SGML standard (ISO 8879). Thus, the syntax follows this standard, which does not simply omit the public identifier; it allows you to use syntax only with a system identifier, in practice a URL, but then the syntax will be different. When HTML was defined, it would be better to use this syntax.
This does not matter in practice, because no browser has ever implemented HTML according to the book (according to the SGML standard), and browsers treat doctype lines in the same way as magic lines that can select a specific mode (quirks, standard, almost standard mode; co-call "sniping doctype"). In JavaScript, this does not matter; you can access the doctype string in javascript, but all of that.
source share