Top > FrameMaker Blog Index > XML文書にスキーマを指定する

XML文書にスキーマを指定する

XML文書にスキーマ(XML-schema)を指定した状態で、そのXML文書をFrameMakerで開くメリットは、 構造違反を回避できることです。

FrameMakerのXML文書のフォーマットの通常のワークフローは、

  1. XML-schemaを(DTDを経由して) EDDに取り込み
  2. EDDをテンプレートに適用し
  3. XML文書をFrameMakerで開く

という手順になります。

もし、現在処理しようとしているXML文書を編集し、スキーマ定義に影響を与えるような構造変化が起きた場合は、 そのXML文書をFrameMakerで開こうとすると、構造違反になります。

この構造違反を回避するためには、上記の通常のワークフロー3ステップを行う必要があります。 (これは頻繁に作業が発生するとしたらかなり煩わしい。)

しかし、スキーマの関連づけ指定をしたXML文書をFrameMakerで開けば、 そのスキーマが優先されるため、構造違反なしにXML文書をFrameMakerで開くことができます。

XML文書をFrameMakerで開くときに構造違反が出る・出ないの問題は、 もし、DocbookXMLなど広く普及しているスキーマを使用しているなどの理由でスキーマが固定されている場合には、 全く問題になりません。 しかし、このサイトで説明しているような方法... つまり、DocbookXMLを変換したXML文書をFrameMakerでフォーマットさせたい場合は、 XML変換のロジックを変えるたびに構造は変化していくため、 この機能は、重要になります。

指定方法その1

関連づけるXML-schema(http://foobar.net/my.xsd)が、ネット上にある場合は以下のようにします。

<book
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:noNamespaceSchemaLocation="http://foobar.net/my.xsd"
       >
</book>

※ book要素はルート要素です。

DOCTYPE宣言でDTDを指定できるのだから、 (DTDもスキーマの一種だから)それと同じ方法で、XML-schemaを指定できればよいような気がするが 何か事情があるのだろう。

指定方法その2

関連づけるXML-schema(my.xsd)が、ローカルにあり、さらに現在FrameMakerで開こうとしているXML文書と 同じフォルダ内にある場合は、 以下のようにします。

<book
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="my.xsd">
</book>

ローカルファイルシステム上なので... file:// を使うことも可能ですが、my.xsd の所在が固定でない場合は、 この方法(単に my.xsd と指定する)がもっとも適当です。