From owner-xml-dev@ic.ac.uk Tue Aug 4 01:41:30 1998 Date: Tue, 04 Aug 1998 12:40:05 +0700 From: James Clark <jjc@jclark.com> To: "XML Developers' List" <xml-dev@ic.ac.uk> Subject: Namespaces in 20 lines
[Note: The immediate context for this posting was the release of the W3C Namespace Working Draft: "Namespaces in XML." References: WD-xml-names-19980802, World Wide Web Consortium Working Draft 2-August-1998.]
At first glance the new namespace draft might appear rather complicated, but actually it is really easy to implement. Assuming you have a non-namespace-aware XML tree, here's all it takes to implement basic namespace processing in Java (albeit inefficiently and with incomplete enforcement of namespace constraints):
/** * Expands an element type or attribute name (according to the * value of the <code>isAttribute</code> argument) using the * namespace declarations in effect for the specified element. * For a non-global attribute or for an unqualified element type * name or for a name starting with "xml:", returns the name * unchanged. Otherwise returns an expanded name consisting * of the namespace URI followed by a <code>+</code> * character followed by the local part. Returns null if the name * cannot be expanded because a namespace prefix is not declared. */ String expandName(String name, Element element, boolean isAttribute) { // The index of the colon character in the name. int colonIndex = name.indexOf(':'); // The name of the attribute that declares the namespace prefix. String declAttName; if (colonIndex == -1) { // Default namespace applies only to element type names. if (isAttribute) return name; declAttName = "xmlns"; } else { String prefix = name.substring(0, colonIndex); // "xml:" is special if (prefix.equals("xml")) return name; declAttName = "xmlns:" + prefix; } for (; element != null; element = element.getParent()) { String ns = element.getAttributeValue(declAttName); if (ns != null) { // Handle special meaning of xmlns="" if (ns.length() == 0 && colonIndex == -1) return name; return ns + '+' + name.substring(colonIndex + 1); } } return null; }
James
xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev@ic.ac.uk Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/ To (un)subscribe, mailto:majordomo@ic.ac.uk the following message; (un)subscribe xml-dev To subscribe to the digests, mailto:majordomo@ic.ac.uk the following message; subscribe xml-dev-digest List coordinator, Henry Rzepa (mailto:rzepa@ic.ac.uk)