仕事でほぼ初めてXMLからHTMLを作成するスタイルシートを作っています.HTMLといっても拡張子は.phpで中にサーバー側で処理させるようPHPの処理命令をいろいろ埋め込まなければなりません.以下はその例です.

<?php includeInnerHtml('c_19.php');?>

ところがXSLTプロセッサのSaxonで上記のような処理命令を出力しようとすると、上手くいってくれません.例えば

<xsl:processing-instruction name="php">includeInnerHtml('C_19.php');</xsl:processing-instruction>

と書くと、

<?php includeInnerHtml('c_19.php');>

のように出てしまい、最後が?>で閉じてくれません.
これはSaxonのバグではないかと思って報告したのが以下です.

PI output bug in @method="html"
https://saxonica.plan.io/issues/4321

ご覧いただくとわかりますが、Kay博士の見解は、バグではなく元々のHTMLの仕様に基づくものだそうです.確かにHTML 4.01の仕様ではそうなっていました!

B.3.6 Processing Instructions
https://www.w3.org/TR/html401/appendix/notes.html#h-B.3.6

A processing instruction begins with <? and ends with >

しかしXML仕様では処理命令は以下のようなBNFで表され、明らかに?>で終わります.

2.6 Processing Instructions
https://www.w3.org/TR/xml/#sec-pi

[16] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'
[17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))

なぜHTMLとXMLでは処理命令の書き方にこのような乖離が生まれてしまったのでしょうか?

御存知の方おられましたらご教示ください.

以上 よろしくお願いいたします.