The version of REXML included within ruby 1.8.2 does not appear to contain xml:base support. However, this is not much of a problem in Ruby, as such support can easily be added.
The version of REXML included within ruby 1.8.2 does not appear to contain xml:base support. However, this is not much of a problem in Ruby, as such support can easily be added.
This
code checks for the method named defined by
DOM3, and if not found, adds it directly to the
REXML::Element
class. I also include four unit
tests, ones that focus more on different combinations of
xml:base
usage than on the correct operation of
URI.join
.
While the tests passed, as I wrote both the code and the tests, this begs the question as to whether or not I have interpreted the spec correctly. As libxml2 has a reputation for speed, completeness, and correctness, and has a Python interface, I simply ported the test. The results don’t disappoint.
I made a
similar
attempt with JDK 5.0, but with
less positive results. Apparently in one of the tests,
getBaseURI
returns null
. If anybody
has any insight into either the problem or in what I did
incorrectly, I would appreciate it.
I think you’re missing a few test cases. How does this interact with HTTP? If no xml:base is specified on the root element, the base URI is the base URI of the document. The base URI of the document could be the document URI, or it could be specified in a Content-Location HTTP header (or Content-Base, but let’s ignore that for now). The Content-Location header can itself be a relative URI, in which case it is relative to the URI of the document.
References:
Mark, unquestionably, this meager set of tests is just a starter set. However, two of the four tests do rely on an XML base being externally provided as the href
and all the xml:base
elements are relative. I even factored out the externally provided base as a parameter to the parse routine (with a default provided for the purposes of testing).
Actually interacting with HTTP will have to wait until I create a rails version. From what I have read, rail’s support for testing goes far beyond what I have explored here. Particularly, when you get to the chapter on testing controllers.