XML文書にスキーマを指定する
XML文書にスキーマ(XML-schema)を指定した状態で、そのXML文書をFrameMakerで開くメリットは、 構造違反を回避できることです。
FrameMakerのXML文書のフォーマットの通常のワークフローは、
- XML-schemaを(DTDを経由して) EDDに取り込み
- EDDをテンプレートに適用し
- 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要素はルート要素です。
gDOCTYPE宣言で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">
ローカルファイルシステム上なので... file:// を使うことも可能ですが、my.xsd の所在が固定でない場合は、 この方法(単に my.xsd と指定する)がもっとも適当です。