DOCTYPE内で直接ENTITYで実体参照を定義した場合、各要素に対して適当な定義がされていない、つまりENTITYしか書いていない状態でもエラーは起きない。定義されていない参照をするとエラーが起きる。DTDとしてはおかしい(?)が定義された参照が反映されている。
外部参照でなおかつPUBLICでの場合、どんなURIでもエラーは起きない。DTDで実体参照に定義されていないものをXML文章内に書いてもエラーは発生しない。しかし、定義されているはずの実体参照が反映されない。完全に無視されている模様。
外部参照でなおかつSYSTEMとして呼び出す場合。Windows環境の場合、ルートからのパス呼び出すのに「C:」を付けるとオープンエラーでは無くてSablotronエラーになる。スラッシュから始めればCドライブのルートから指定できる。"file://"を先頭に付けたら正常に反映された。URIを指定した場合はエラーが出る。
なお、PUBLICのときは公開識別子を書かないとSYNTAXエラーになる。逆にSYSTEMの時は公開識別子を書くとエラーが出るので注意。文法チェックは厳しいようだ。
slt_set_base ( $handle, 'file://C:/foo/bar/' );
をPHPに追加しておくとディレクトリのスタート地点を指定できる、最後のスラッシュを落とさないように。XMLでDTDの場所指定をスラッシュから始まる文字列で指定している場合は反映されない。<xsl:include href="hoge">とかを使っていると、こちらにも反映されてしまうので注意。