DOM Level 1 开始,就已经有了 DOMImplementation.hasFeature (feature, version) ,用来测试DOM支持的features。
但是也许是因为 DOM level 2 之后才正式的Modulization,故DOM1中显然有含糊的地方。
DOM level 2 共有14个modules,如Core, XML, HTML等。DOM Core REC中实际定义了两个module:Core、XML,分别对应于Foundamental Interfaces和Extended Interfaces(CDATA, Entity, PI, DocType等)。两者区分在于HTML。对于HTML-only的impl来说,不需要实现后者。
题外话:实际上在Core中也有些方法(如DOM2中的createDocument、createDocumentType等)是HTML- only的impl不需要实现的,或者被设计为,若是HTML Doc,就抛出 NOT_SUPPORTED_ERR 的 DOMException(如DOM1中的createCDATASection等)。module的分割点横切进入了类或接口的内部。因此或者用文字说明,或者抛出unsupported的exception来。比较学院派的做法,要么重新创建Core的一组接口,然后XML和HTML的分别继承扩展之。但这样可能过于繁琐了(DOM还不够繁琐吗?)……而且将来就没有HTML只有XHTML了,XHTML也是XML,没有html-only,故不存在可以不实现的例外了。
回到正题。对于 DOM Level 1,hasFeature方法的feature参数只能是"XML"和"HTML",但是语义却未在REC中作出说明——即并没有说明到底什么是XML Feature什么是HTML Feature。这就是含混之处。在errata中也没有澄清。
2000/9发布的2nd Edition增加了Compliance一节澄清了这个问题,即XML和HTML的意义是同DOM2一样的。但在DOM1里面是没有Core这个 Feature可供测试的,因为已经规定所有compliant的impl都要实现之。那倒也是,这是最最基本的部分了,如果不支持,还能称作DOM实现吗?剩下的问题在于,这个按照流程早就应该成为REC的2nd Ed却始终是Working Draft。因此严格来说,这个澄清仍没有列入正式标准中。或许应该给dom mailing list发信问问(或者已经有人问过了?)……