Skip to main content
Known Participant
July 3, 2003
Question

#PCDATA内に強制改行を挿入することはできますか?

  • July 3, 2003
  • 3 replies
  • 1270 views
XDocbookのドキュメント内に、<br /><br />http://www.docbook.org/tdg/en/html/informalexample.html<br /><br />に見られるような、<br /><br /><informalexample><br /> <programlisting><br /> int i = 0;<br /> int j = 0;<br /> ...<br /> </programlisting><br /><informalexample><br /><br />という記述を入れたいのですが、FrameMakerで開いたときに#PCDATA内の行間の改行を保存する方法、または明示的に強制改行を挿入する方法はありますか?<br /><br />できれば、各行を別個に<informalexample><programlisting></programlisting></informalexample>で括ることは避けたいのですが、ご教示をお願いします。
    This topic has been closed for replies.

    3 replies

    Participating Frequently
    July 4, 2003
    taroikai様、こんにちわ。

    別のトピ(整形されたXMLの読み込み)で、space文字の話題が出ているんですが、"nbsp"にしないと文字は削除されてしまいますか?
    #PCDATA内のspaceは有効になると思うのですが。

    で、改行用のエンティティ定義ですが、確かに聞いた事はないですね。
    実現するには、HTMLのBRのような改行用要素をDTDで定義する方法になるかと思います。
    但し、使用しているDTDの変更が可能かどうか、別問題ですが…。
    Known Participant
    July 4, 2003
    「&nbsp」のようなキャラクタエンティティ、と半角英文字で書いたのですが、ブラウザでは空白にしか見えないので、質問の内容が伝わりませんでしたね。失礼しました。

    XML文書中の空白や改行について少し考えてみたのですが、やはりXML中の空白文字に意味を持たせることは、改行も含めて、あまり得策ではないようです。よって、空白文字に意味を持たせることはあきらめて、&nbspを使うことにします。

    ところで、もうひとつ追加質問があります。

    FrameMaker7.0では、"preserve line breaks"を記述すると、CDATA中の改行がそのまま読み込まれるのですが、XML処理系一般ではCDATA中の空白が無視されます。よって、FrameMaker以外の処理系とXML文書を共用したい場合は、改行を入れるのも避けるべきだと感じます。

    ついては、&nbspと同じように使える、改行用のエンティティがあればいいのですが、定義が見つかりません。何方か参考になるアイディアをお持ちでしょうか?
    Known Participant
    July 3, 2003
    read/write ルールの該当要素の部分に以下の記述を加えることで、解決を見ました。ありがとうございました。

    preserve line breaks;

    ただし、同じPCDATA領域で複数の空白文字が連続する場合、ひとつ以上の空白文字が無視されてしまうことがわかりました。

    たとえば、次のような場合を想定しています:



    int i = 0;
    int name = 0;
    int age = 0;



    '= 0'の前に空白を入れて、すべての行で'=0'の位置が揃うようにしたいとします。

     のようなキャラクタエンティティを利用すればよいのでしょうが、見易さを優先すると、普通の空白文字を使いたいです。なにか方法はあるでしょうか?