XML DOM XSLT 6章 DTD(DocumentType)
- 6.1. DTDを読み込む
- 6.2. DocumentTypeの生成
- 6.3. DTDを書く
6.3. DTDを書く
それでは、DTDを出力するにはどうしたらよいのでしょう。今までDOMツリーをファイルに出力するために、Transformを使用してきました。しかし、TransformはDocumentTypeの内容を出力しません。
JAXP でDTDを出力するためには、TransformerのsetOutputPropertiesメソッドを使用します。
例えば、以下のように、strutsの定義ファイルであることを示すDTDを、XML文書に出力することを考えます。
1 <?xml version="1.0" encoding="ISO-8859-1" ?> 2 <!DOCTYPE struts-config PUBLIC 3 "-//Apache SoftWare Foundation//DTD Struts Configuration 1.1//EN" 4 "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> 5 <struts-config> ...
以上のXML文書を出力するプログラムは以下のようになります。
...
17
18 public static void main(String args[]) throws Exception{
19
...
27
28 Document document = domImpl.createDocument("","struts-config",documentType);
29
30
31 TransformerFactory transformerFactory = TransformerFactory.newInstance();
32 Transformer transformer = transformerFactory.newTransformer();
33 transformer.setOutputProperty(OutputKeys.INDENT, "yes");
34 transformer.setOutputProperty(OutputKeys.METHOD, "xml");
35 transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd");
36 transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, "-//Apache SoftWare Foundation//DTD Struts Configuration 1.1//EN");
37
38
39 DOMSource source = new DOMSource(document);
40 File newXML = new File("struts-config.xml");
41 FileOutputStream os = new FileOutputStream(newXML);
42 StreamResult result = new StreamResult(os);
43 transformer.transform(source, result);
44
...
出力するDTDの内容は、TransformerのsetOutputPropertyメソッドで指定します。setOutputPropertyは一つ目の引数にプロパティ名、二つ目の引数にプロパティの値を指定します。指定できるプロパティ名は、OutputKeysのstaticフィールドで定義されています。以下に指定可能なプロパティを簡単に紹介します。
| プロパティ | 内容 |
|---|---|
| ENCODING | encoding は、Transformer が文字のシーケンスをバイトのシーケンスとして符号化するために使用する優先文字エンコーディングを指定します |
| DOCTYPE_PUBLIC |
文書型定義で使用される公開識別子を指定します。 |
| DOCTYPE_SYSTEM |
文書型定義で使用されるシステム識別子を指定します。 |
| INDENT | このキーに対する値は "yes" または "no" です。 indent は、結果ツリーを出力する際に Transformer がさらに空白を追加するかどうかを指定します。値は、yes または no でなければなりません。 |
35行目でシステム識別子、36行目に公開識別子を取得します。Propertyを指定したら、ファイルに出力します。struts-config.xmlには以下のように出力されます。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache SoftWare Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> <struts-config/>
(実習課題2)
以下のXML文書を出力するプログラムを作成しなさい
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person PUBLIC "-//Four Dimensional Data, Inc.//DTD DOM Example 1.0//EN"
"DOMExample.dtd">
<person>
<name>Taro Yamada</name>
<age>31</age>
<license>Sun Certified Programmer</license>
<license>Sun Certified Developer</license>
</person>

