3 返信 最新の回答 日時: Jul 4, 2003 8:36 AM ユーザー:(ymgc)

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

      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>で括ることは避け たいのですが、ご教示をお願いします。
        • 1. Re: #PCDATA内に強制改行を挿入することはできますか?
          Level 1
          read/write ルールの該当要素の部分に以下の記述を加えることで、解決を見ました。ありがとうございました。

          preserve line breaks;

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

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


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



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

           のようなキャラクタエンティティを利用すればよいのでしょうが、見易さを優先すると、普通の空白文字を使いたいです。なにか方法はあるでしょうか?
          • 2. Re: #PCDATA内に強制改行を挿入することはできますか?
            Level 1
            「&nbsp」のようなキャラクタエンティティ、と半角英文字で書いたのですが、ブラウザでは空白にしか見えないので、質問の内容が伝わりませんでしたね。失礼しました。

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

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

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

            ついては、&nbspと同じように使える、改行用のエンティティがあればいいのですが、定義が見つかりません。何方か参考になるアイディアをお持ちでしょうか?
            • 3. Re: #PCDATA内に強制改行を挿入することはできますか?
              taroikai様、こんにちわ。

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

              で、改行用のエンティティ定義ですが、確かに聞いた事はないですね。
              実現するには、HTMLのBRのような改行用要素をDTDで定義する方法になるかと思います。
              但し、使用しているDTDの変更が可能かどうか、別問題ですが…。