In https://github.com/xml4r/libxml-ruby/commit/f82dfd25969a642f2c0fbfc23c56b6a2b46c3f1e looks like external, system, and name were made non-nullable. That was reverted for name in https://github.com/xml4r/libxml-ruby/commit/2852b92dca14f5bc53e2403ced4e16d5fdaa4452 But it seems that it's not now possible to produce an internal DTD, because external cannot be nil?