- 6.1. DTDを読み込む
- 6.2. DocumentTypeの生成
- 6.3. DTDを書く
6.2. DocumentTypeの生成
新しくDocumentTypeノードを生成して、DOMツリーに追加するには、DOMImplementationを使用します。
主なメソッド | 内容 |
---|---|
public DocumentType createDocumentType (String qualifiedName, String publicId, String systemId) throws DOMException |
空の DocumentType ノードを作成します。エンティティ宣言およびエンティティ指定 (表記法指定) は使用できません。エンティティ参照の拡張およびデフォルト属性の追加は行われません。DocumentType を生成する方法は、将来のバージョンの DOM で提供される予定です。 |
DOMImplementationを使用すれば、指定したDocumentTypeを持つDOMツリーを生成することが可能です。例えば、以下のように、strutsの定義ファイルであることを示すDocumentTypeノードを、Documentノードに挿入することを考えます。
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文書を出力するプログラムは以下のようになります。
1 import org.w3c.dom.Document; 2 import org.w3c.dom.DOMImplementation; 3 import org.w3c.dom.DocumentType; 4 import javax.xml.parsers.DocumentBuilderFactory; 5 import javax.xml.parsers.DocumentBuilder; 6 7 8 public class WriteStrutsConfig{ 9 10 public static void main(String args[]) throws Exception{ 11 12 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 13 DocumentBuilder builder = factory.newDocumentBuilder(); 14 DOMImplementation domImpl=builder.getDOMImplementation(); 15 16 DocumentType documentType=domImpl.createDocumentType("struts-config", 17 "-//Apache SoftWare Foundation//DTD Struts Configuration 1.1//EN", 18 "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"); 19 20 Document document = domImpl.createDocument("","struts-config",documentType); 21 22 System.out.println(document.getDoctype().getSystemId()); 23 24 } 25 26 }
まず、14行目でDOMImplementationを取得しています。DOMImplementationはDocumentBuilderのgetDOMImplementationメソッドを使用して取得します。(DOMImplementationの取得方法は、DOM Level2では規定していません。使用するDOMパーサに依存するので、注意してください。)次に、DOMImplementationよりDocumentTypeノードを生成します。DocumentTypeノードは、DOMImplementationのcreateDocumentTypeメソッドを使用して取得します。createDocumentTypeの1番目の引数には、ルート要素の名前を指定します。2番目の引数には、DTDの公開識別子を指定します。3番目の引数には、DTDのシステム識別子を指定します。3番目の引数にDocumentTypeノードを指定します。
22行目では、作成したDocumentノードのDocumentTypeの内容を確認しています。このプログラムを実行すると、以下のような結果になります。
1 -//Sun Microsystems, Inc.//DTD Web Application 2.3//EN
ところで、DOM Level2では、DocumentTypeの編集をサポートしていません。つまり、以下のような操作を行うことはできません。
- DocumentTypeに内部サブセットを追加する
- DocumentTypeに実体(Entity)や記法(Notation)を追加する