下記の記事が公開されました。
そういえば書き忘れたかも知れないが…… §
XMLがSGMLのサブセットであると考えた時、決定的にXMLにあってSGMLにはない構文があります。それは、XML宣言です。上記記事から参照されているComparison of SGML and XMLにあるSGML宣言を見て分かるとおり、SGML宣言とXML宣言は全く似てすらいない別物です。
では、XML宣言を使うとSGMLプロセサが処理できないのかというと、そうでもないようです。どうも、SGMLプロセサはXML宣言を処理命令(PI)と認識するです。
そこから逆算して、なぜXML宣言が<?で書き始め、?>で書き終わらねばならないのか、その必然性が何となく見えてきますね。
つまり、独自に追加される構文は、SGMLプロセサが受け入れ可能な構文でなければならないのです。
しかし、それはSGMLプロセサが受け入れ可能という理由で規定された構文であるために、いくら処理命令(PI)と似ていようと、XMLでは処理命令(PI)として扱われません。