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>