tohokuaikiのチラシの裏

技術的ネタとか。

DOCTYPEについてと、その実装をJavaのDOMDocumentでやってみることのメモ

いまいちDOCTYPEが分かってなかったので。
文書型宣言の読み方 | 鳩丸よもやま話
を一目で表すとこんな感じ。(クリックして拡大して見てくれよな!)
f:id:tohokuaiki:20150114184315p:plain

JavaのDOMDocumentTypeでどうやるか

簡単な実験

Document pubDoc = new DOMDocument();
Document sysDoc = new DOMDocument();
DOMDocumentType sysDocType = new DOMDocumentType("root", "http://foo.com");
DOMDocumentType pubDocType = new DOMDocumentType("root", "-//OASIS//DTD DITA Map//EN", "http://foo.com");

// system
sysDoc.setDocType(sysDocType);
System.err.println(sysDoc.asXML());// <!DOCTYPE root SYSTEM "http://foo.com">
sysDocType.setSystemID(null);
System.err.println(sysDoc.asXML());// <!DOCTYPE root>

// public
pubDoc.setDocType(pubDocType);
System.err.println(pubDoc.asXML());// <!DOCTYPE root PUBLIC "-//OASIS//DTD DITA Map//EN" "http://foo.com">
pubDocType.setElementName("rootPublic");
System.err.println(pubDoc.asXML());// <!DOCTYPE rootPublic PUBLIC "-//OASIS//DTD DITA Map//EN" "http://foo.com">
pubDocType.setSystemID(null);
System.err.println(pubDoc.asXML());// <!DOCTYPE rootPublic PUBLIC "-//OASIS//DTD DITA Map//EN">
pubDocType.setPublicID(null);
System.err.println(pubDoc.asXML());// <!DOCTYPE rootPublic>
sysDocType.setSystemID(null);
System.err.println(pubDoc.asXML());// <!DOCTYPE rootPublic>
pubDocType.setElementName(null);
System.err.println(pubDoc.asXML());// <!DOCTYPE null>
pubDocType.setSystemID("http://example.com");
System.err.println(pubDoc.asXML());// <!DOCTYPE null SYSTEM "http://example.com">

ここから言えることは

外部識別子について
systeId × ×
publicId × ×
外部識別子 PUBLIC PUBLIC SYSTEM なし