
AH Formatter /
XSL Formatter
XSLT/XSL-FO/MathML テクニックエンティティ |
|
| Q. | entity参照を使用して、外部のファイル(外部エンティティ)をFOに組み込もうとしたのですが、組版結果に反映されません。なぜですか。 [No.2002111502] |
|---|---|
| A. |
この現象はパーサにMSXMLを使用しているために発生します。 例を示して説明します。 [ファイル名:test.fo]
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [ <!ENTITY testseg SYSTEM "testseg.fo"> ]>
<root xmlns="http://www.w3.org/1999/XSL/Format" >
<layout-master-set>
<simple-page-master master-name="frame">
<region-body region-name="frame-body"/>
</simple-page-master>
</layout-master-set>
<page-sequence master-reference="frame">
<flow flow-name="frame-body">
&testseg;
</flow>
</page-sequence>
</root>
[ファイル名:testseg.fo]
<block>
This is a test
</block>
MSXML はエンティティごとに namespace の指定がないと null namespace (namespaceなし)であるとみなされます。つまり展開元(testseg.fo)の block の namespace が展開先(test.fo) の方に指定されている namespace 指定に変わるようなことはありません。したがって、次のように展開されます。 [ファイル名:test.fo(展開後)]
<?xml version="1.0" encoding="utf-8"?>
<root xmlns="http://www.w3.org/1999/XSL/Format" >
<layout-master-set>
<simple-page-master master-name="frame">
<region-body region-name="frame-body"/>
</simple-page-master>
</layout-master-set>
<page-sequence master-reference="frame">
<flow flow-name="frame-body">
<block xmlns="">This is a test</block>
</flow>
</page-sequence>
</root>
エンティティ名「&testseg;」が「 <block xmlns="">This is a test</block>」と展開されます。「xmlns=""」は FO namespace ではないので XSL Formatter は処理をせずに無視します。これにより、組版結果に反映されないのです。
[ファイル名:testseg.fo(修正後)]
<block xmlns="http://www.w3.org/1999/XSL/Format">
This is a test
</block>
|