diff --git a/java/external/src/javax/xml/namespace/NamespaceContext.java b/java/external/src/javax/xml/namespace/NamespaceContext.java new file mode 100644 index 0000000..f7d0a9a --- /dev/null +++ b/java/external/src/javax/xml/namespace/NamespaceContext.java @@ -0,0 +1,255 @@ +/* + * Copyright 2003-2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// $Id$ + +package javax.xml.namespace; + +import java.util.Iterator; + +/** + *
Interface for read only XML Namespace context processing.
+ * + *An XML Namespace has the properties:
+ *XMLConstants.XMLNS_ATTRIBUTE
+ * ("xmlns") in the Namespace declaration example: <element xmlns:prefix="http://Namespace-name-URI">
All get*(*) methods operate in the current scope
+ * for Namespace URI and prefix resolution.
Note that a Namespace URI can be bound to
+ * multiple prefixes in the current scope. This can
+ * occur when multiple XMLConstants.XMLNS_ATTRIBUTE
+ * ("xmlns") Namespace declarations occur in the same Start-Tag and
+ * refer to the same Namespace URI. e.g.
+ *
+ * <element xmlns:prefix1="http://Namespace-name-URI" + * xmlns:prefix2="http://Namespace-name-URI"> + *+ * This can also occur when the same Namespace URI is used in multiple + *
XMLConstants.XMLNS_ATTRIBUTE ("xmlns") Namespace
+ * declarations in the logical parent element hierarchy. e.g.+ * <parent xmlns:prefix1="http://Namespace-name-URI"> + * <child xmlns:prefix2="http://Namespace-name-URI"> + * ... + * </child> + * </parent> + *+ * + *
A prefix can only be bound to a single + * Namespace URI in the current scope.
+ * + * @author Jeff Suttor + * @version $Revision$, $Date$ + * @see javax.xml.XMLConstants javax.XMLConstants for declarations of common XML values + * @see XML Schema Part2: Datatypes + * @see Namespaces in XML + * @see Namespaces in XML Errata + * @since 1.5 + */ + +public interface NamespaceContext { + + /** + *Get Namespace URI bound to a prefix in the current scope.
+ * + *When requesting a Namespace URI by prefix, the following + * table describes the returned Namespace URI value for all + * possible prefix values:
+ * + *
+ * getNamespaceURI(prefix)
+ * return value for specified prefixes
+ * |
+ * |
| prefix parameter | + *Namespace URI return value | + *
DEFAULT_NS_PREFIX ("") |
+ * default Namespace URI in the current scope or
+ * {@link javax.xml.XMLConstants#NULL_NS_URI XMLConstants.NULL_NS_URI("")}
+ * when there is no default Namespace URI in the current scope |
+ *
| bound prefix | + *Namespace URI bound to prefix in current scope | + *
| unbound prefix | + *{@link javax.xml.XMLConstants#NULL_NS_URI XMLConstants.NULL_NS_URI("")} |
+ *
XMLConstants.XML_NS_PREFIX ("xml") |
+ * XMLConstants.XML_NS_URI
+ * ("http://www.w3.org/XML/1998/namespace") |
+ *
XMLConstants.XMLNS_ATTRIBUTE ("xmlns") |
+ * XMLConstants.XMLNS_ATTRIBUTE_NS_URI
+ * ("http://www.w3.org/2000/xmlns/") |
+ *
null |
+ * IllegalArgumentException is thrown |
+ *
Get prefix bound to Namespace URI in the current scope.
+ * + *To get all prefixes bound to a Namespace URI in the current + * scope, use {@link #getPrefixes(String namespaceURI)}.
+ * + *When requesting a prefix by Namespace URI, the following + * table describes the returned prefix value for all Namespace URI + * values:
+ * + *
+ * getPrefix(namespaceURI) return value for
+ * specified Namespace URIs
+ * |
+ * |
| Namespace URI parameter | + *prefix value returned | + *
| <default Namespace URI> | + *XMLConstants.DEFAULT_NS_PREFIX ("")
+ * |
+ *
| bound Namespace URI | + *prefix bound to Namespace URI in the current scope, + * if multiple prefixes are bound to the Namespace URI in + * the current scope, a single arbitrary prefix, whose + * choice is implementation dependent, is returned | + *
| unbound Namespace URI | + *null |
+ *
XMLConstants.XML_NS_URI
+ * ("http://www.w3.org/XML/1998/namespace") |
+ * XMLConstants.XML_NS_PREFIX ("xml") |
+ *
XMLConstants.XMLNS_ATTRIBUTE_NS_URI
+ * ("http://www.w3.org/2000/xmlns/") |
+ * XMLConstants.XMLNS_ATTRIBUTE ("xmlns") |
+ *
null |
+ * IllegalArgumentException is thrown |
+ *
Get all prefixes bound to a Namespace URI in the current + * scope.
+ * + *An Iterator over String elements is returned in an arbitrary, implementation dependent, order.
+ * + *The Iterator is
+ * not modifiable. e.g. the
+ * remove() method will throw
+ * UnsupportedOperationException.
When requesting prefixes by Namespace URI, the following + * table describes the returned prefixes value for all Namespace + * URI values:
+ * + *
+ * getPrefixes(namespaceURI) return value for
+ * specified Namespace URIs |
+ * |
| Namespace URI parameter | + *prefixes value returned | + *
| bound Namespace URI, + * including the <default Namespace URI> | + *Iterator over prefixes bound to Namespace URI in
+ * the current scope in an arbitrary, implementation dependent,
+ * order |
+ *
| unbound Namespace URI | + *empty Iterator |
+ *
XMLConstants.XML_NS_URI
+ * ("http://www.w3.org/XML/1998/namespace") |
+ * Iterator with one element set to
+ * XMLConstants.XML_NS_PREFIX ("xml") |
+ *
XMLConstants.XMLNS_ATTRIBUTE_NS_URI
+ * ("http://www.w3.org/2000/xmlns/") |
+ * Iterator with one element set to
+ * XMLConstants.XMLNS_ATTRIBUTE ("xmlns") |
+ *
null |
+ * IllegalArgumentException is thrown |
+ *
Iterator for all prefixes bound to the
+ * Namespace URI in the current scope
+ */
+ Iterator getPrefixes(String namespaceURI);
+}
diff --git a/java/external/src/javax/xml/namespace/QName.java b/java/external/src/javax/xml/namespace/QName.java
new file mode 100644
index 0000000..ace95c5
--- /dev/null
+++ b/java/external/src/javax/xml/namespace/QName.java
@@ -0,0 +1,426 @@
+/*
+ * Copyright 2003-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// $Id$
+
+package javax.xml.namespace;
+
+import java.io.Serializable;
+
+import javax.xml.XMLConstants;
+
+/**
+ * QName represents a qualified name
+ * as defined in the XML specifications: XML Schema Part2:
+ * Datatypes specification, Namespaces
+ * in XML, Namespaces
+ * in XML Errata.
The value of a QName contains a Namespace
+ * URI, local part and
+ * prefix.
The prefix is included in QName to retain lexical
+ * information when present in an {@link
+ * javax.xml.transform.Source XML input source}. The prefix is
+ * NOT used in {@link #equals(Object)
+ * QName.equals(Object)} or to compute the {@link #hashCode()
+ * QName.hashCode()}. Equality and the hash code are defined using
+ * only the Namespace URI and local part.
If not specified, the Namespace URI is set to {@link + * javax.xml.XMLConstants#NULL_NS_URI XMLConstants.NULL_NS_URI}. + * If not specified, the prefix is set to {@link + * javax.xml.XMLConstants#DEFAULT_NS_PREFIX + * XMLConstants.DEFAULT_NS_PREFIX}.
+ * + *QName is immutable.
Stream Unique Identifier.
+ */ + private static final long serialVersionUID = 4418622981026545151L; + + /** + *Namespace URI of this QName.
local part of this QName.
prefix of this QName.
QName constructor specifying the Namespace URI
+ * and local part.
If the Namespace URI is null, it is set to
+ * {@link javax.xml.XMLConstants#NULL_NS_URI
+ * XMLConstants.NULL_NS_URI}. This value represents no
+ * explicitly defined Namespace as defined by the Namespaces
+ * in XML specification. This action preserves compatible
+ * behavior with QName 1.0. Explicitly providing the {@link
+ * javax.xml.XMLConstants#NULL_NS_URI
+ * XMLConstants.NULL_NS_URI} value is the preferred coding
+ * style.
If the local part is null an
+ * IllegalArgumentException is thrown.
+ * A local part of "" is allowed to preserve
+ * compatible behavior with QName 1.0.
When using this constructor, the prefix is set to {@link + * javax.xml.XMLConstants#DEFAULT_NS_PREFIX + * XMLConstants.DEFAULT_NS_PREFIX}.
+ * + *The Namespace URI is not validated as a + * URI reference. + * The local part is not validated as a + * NCName + * as specified in Namespaces + * in XML.
+ * + * @param namespaceURI Namespace URI of theQName
+ * @param localPart local part of the QName
+ *
+ * @see #QName(String namespaceURI, String localPart, String
+ * prefix) QName(String namespaceURI, String localPart, String
+ * prefix)
+ */
+ public QName(final String namespaceURI, final String localPart) {
+ this(namespaceURI, localPart, XMLConstants.DEFAULT_NS_PREFIX);
+ }
+
+ /**
+ * QName constructor specifying the Namespace URI,
+ * local part and prefix.
If the Namespace URI is null, it is set to
+ * {@link javax.xml.XMLConstants#NULL_NS_URI
+ * XMLConstants.NULL_NS_URI}. This value represents no
+ * explicitly defined Namespace as defined by the Namespaces
+ * in XML specification. This action preserves compatible
+ * behavior with QName 1.0. Explicitly providing the {@link
+ * javax.xml.XMLConstants#NULL_NS_URI
+ * XMLConstants.NULL_NS_URI} value is the preferred coding
+ * style.
If the local part is null an
+ * IllegalArgumentException is thrown.
+ * A local part of "" is allowed to preserve
+ * compatible behavior with QName 1.0.
If the prefix is null, an
+ * IllegalArgumentException is thrown. Use {@link
+ * javax.xml.XMLConstants#DEFAULT_NS_PREFIX
+ * XMLConstants.DEFAULT_NS_PREFIX} to explicitly indicate that no
+ * prefix is present or the prefix is not relevant.
The Namespace URI is not validated as a + * URI reference. + * The local part and prefix are not validated as a + * NCName + * as specified in Namespaces + * in XML.
+ * + * @param namespaceURI Namespace URI of theQName
+ * @param localPart local part of the QName
+ * @param prefix prefix of the QName
+ */
+ public QName(String namespaceURI, String localPart, String prefix) {
+
+ // map null Namespace URI to default to preserve compatibility with QName 1.0
+ if (namespaceURI == null) {
+ this.namespaceURI = XMLConstants.NULL_NS_URI;
+ } else {
+ this.namespaceURI = namespaceURI;
+ }
+
+ // local part is required. "" is allowed to preserve compatibility with QName 1.0
+ if (localPart == null) {
+ throw new IllegalArgumentException("local part cannot be \"null\" when creating a QName");
+ }
+ this.localPart = localPart;
+
+ // prefix is required
+ if (prefix == null) {
+ throw new IllegalArgumentException("prefix cannot be \"null\" when creating a QName");
+ }
+ this.prefix = prefix;
+ }
+
+ /**
+ * QName constructor specifying the local part.
+ *
+ * If the local part is null an
+ * IllegalArgumentException is thrown.
+ * A local part of "" is allowed to preserve
+ * compatible behavior with QName 1.0.
+ *
+ * When using this constructor, the Namespace URI is set to
+ * {@link javax.xml.XMLConstants#NULL_NS_URI
+ * XMLConstants.NULL_NS_URI} and the prefix is set to {@link
+ * javax.xml.XMLConstants#DEFAULT_NS_PREFIX
+ * XMLConstants.DEFAULT_NS_PREFIX}.
+ *
+ * In an XML context, all Element and Attribute names exist
+ * in the context of a Namespace. Making this explicit during the
+ * construction of a QName helps prevent hard to
+ * diagnosis XML validity errors. The constructors {@link
+ * #QName(String namespaceURI, String localPart) QName(String
+ * namespaceURI, String localPart)} and
+ * {@link #QName(String namespaceURI, String localPart, String prefix)}
+ * are preferred.
+ *
+ * The local part is not validated as a
+ * NCName
+ * as specified in Namespaces
+ * in XML.
+ *
+ * @param localPart local part of the QName
+ * @see #QName(String namespaceURI, String localPart) QName(String
+ * namespaceURI, String localPart)
+ * @see #QName(String namespaceURI, String localPart, String
+ * prefix) QName(String namespaceURI, String localPart, String
+ * prefix)
+ */
+ public QName(String localPart) {
+ this(
+ XMLConstants.NULL_NS_URI,
+ localPart,
+ XMLConstants.DEFAULT_NS_PREFIX);
+ }
+
+ /**
+ * Get the Namespace URI of this QName.
+ *
+ * @return Namespace URI of this QName
+ */
+ public String getNamespaceURI() {
+ return namespaceURI;
+ }
+
+ /**
+ * Get the local part of this QName.
+ *
+ * @return local part of this QName
+ */
+ public String getLocalPart() {
+ return localPart;
+ }
+
+ /**
+ * Get the prefix of this QName.
+ *
+ * The prefix assigned to a QName might
+ * NOT be valid in a different
+ * context. For example, a QName may be assigned a
+ * prefix in the context of parsing a document but that prefix may
+ * be invalid in the context of a different document.
+ *
+ * @return prefix of this QName
+ */
+ public String getPrefix() {
+ return prefix;
+ }
+
+ /**
+ * Test this QName for equality with another
+ * Object.
+ *
+ * If the Object to be tested is not a
+ * QName or is null, then this method
+ * returns false.
+ *
+ * Two QNames are considered equal if and only if
+ * both the Namespace URI and local part are equal. This method
+ * uses String.equals() to check equality of the
+ * Namespace URI and local part. The prefix is
+ * NOT used to determine equality.
+ *
+ * This method satisfies the general contract of {@link
+ * java.lang.Object#equals(Object) Object.equals(Object)}
+ *
+ * @param objectToTest the Object to test for
+ * equality with this QName
+ * @return true if the given Object is
+ * equal to this QName else false
+ */
+ public final boolean equals(Object objectToTest) {
+ if (objectToTest == null || !(objectToTest instanceof QName)) {
+ return false;
+ }
+
+ QName qName = (QName) objectToTest;
+
+ return namespaceURI.equals(qName.namespaceURI)
+ && localPart.equals(qName.localPart);
+ }
+
+ /**
+ * Generate the hash code for this QName.
+ *
+ * The hash code is calculated using both the Namespace URI and
+ * the local part of the QName. The prefix is
+ * NOT used to calculate the hash
+ * code.
+ *
+ * This method satisfies the general contract of {@link
+ * java.lang.Object#hashCode() Object.hashCode()}.
+ *
+ * @return hash code for this QName Object
+ */
+ public final int hashCode() {
+ return namespaceURI.hashCode() ^ localPart.hashCode();
+ }
+
+ /**
+ * String representation of this
+ * QName.
+ *
+ * The commonly accepted way of representing a QName
+ * as a String was defined
+ * by James Clark. Although this is not a standard
+ * specification, it is in common use, e.g. {@link javax.xml.transform.Transformer#setParameter(String name, Object value)}.
+ * This implementation represents a QName as:
+ * "{" + Namespace URI + "}" + local part. If the Namespace URI
+ * .equals(XMLConstants.NULL_NS_URI), only the
+ * local part is returned. An appropriate use of this method is
+ * for debugging or logging for human consumption.
+ *
+ * Note the prefix value is NOT
+ * returned as part of the String representation.
+ *
+ * This method satisfies the general contract of {@link
+ * java.lang.Object#toString() Object.toString()}.
+ *
+ * @return String representation of this QName
+ */
+ public String toString() {
+ if (namespaceURI.equals(XMLConstants.NULL_NS_URI)) {
+ return localPart;
+ } else {
+ return "{" + namespaceURI + "}" + localPart;
+ }
+ }
+
+ /**
+ * QName derived from parsing the formatted
+ * String.
+ *
+ * If the String is null or does not conform to
+ * {@link #toString() QName.toString()} formatting, an
+ * IllegalArgumentException is thrown.
+ *
+ * The String MUST be in the
+ * form returned by {@link #toString() QName.toString()}.
+
+ * The commonly accepted way of representing a QName
+ * as a String was defined
+ * by James Clark. Although this is not a standard
+ * specification, it is in common use, e.g. {@link javax.xml.transform.Transformer#setParameter(String name, Object value)}.
+ * This implementation parses a String formatted
+ * as: "{" + Namespace URI + "}" + local part. If the Namespace
+ * URI .equals(XMLConstants.NULL_NS_URI), only the
+ * local part should be provided.
+ *
+ * The prefix value CANNOT be
+ * represented in the String and will be set to
+ * {@link javax.xml.XMLConstants#DEFAULT_NS_PREFIX
+ * XMLConstants.DEFAULT_NS_PREFIX}.
+ *
+ * This method does not do full validation of the resulting
+ * QName.
+ *
The Namespace URI is not validated as a
+ * URI reference.
+ * The local part is not validated as a
+ * NCName
+ * as specified in
+ * Namespaces in XML.
+ *
+ * @param qNameAsString String representation
+ * of the QName
+ * @return QName corresponding to the given String
+ * @see #toString() QName.toString()
+ */
+ public static QName valueOf(String qNameAsString) {
+
+ // null is not valid
+ if (qNameAsString == null) {
+ throw new IllegalArgumentException("cannot create QName from \"null\" or \"\" String");
+ }
+
+ // "" local part is valid to preserve compatible behavior with QName 1.0
+ if (qNameAsString.length() == 0) {
+ return new QName(
+ XMLConstants.NULL_NS_URI,
+ qNameAsString,
+ XMLConstants.DEFAULT_NS_PREFIX);
+ }
+
+ // local part only?
+ if (qNameAsString.charAt(0) != '{') {
+ return new QName(
+ XMLConstants.NULL_NS_URI,
+ qNameAsString,
+ XMLConstants.DEFAULT_NS_PREFIX);
+ }
+
+ // Namespace URI improperly specified?
+ if (qNameAsString.startsWith("{" + XMLConstants.NULL_NS_URI + "}")) {
+ throw new IllegalArgumentException(
+ "Namespace URI .equals(XMLConstants.NULL_NS_URI), "
+ + ".equals(\"" + XMLConstants.NULL_NS_URI + "\"), "
+ + "only the local part, "
+ + "\"" + qNameAsString.substring(2 + XMLConstants.NULL_NS_URI.length()) + "\", "
+ + "should be provided.");
+ }
+
+ // Namespace URI and local part specified
+ int endOfNamespaceURI = qNameAsString.indexOf('}');
+ if (endOfNamespaceURI == -1) {
+ throw new IllegalArgumentException(
+ "cannot create QName from \""
+ + qNameAsString
+ + "\", missing closing \"}\"");
+ }
+ return new QName(
+ qNameAsString.substring(1, endOfNamespaceURI),
+ qNameAsString.substring(endOfNamespaceURI + 1),
+ XMLConstants.DEFAULT_NS_PREFIX);
+ }
+}
diff --git a/java/external/src/javax/xml/namespace/package.html b/java/external/src/javax/xml/namespace/package.html
new file mode 100644
index 0000000..f4788a3
--- /dev/null
+++ b/java/external/src/javax/xml/namespace/package.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+ javax.xml.namespace
+
+
+
+
+
+
+
+XML Namespace processing.
+
+The following XML standards apply:
+
+
+
+
diff --git a/java/external/src/javax/xml/package.html b/java/external/src/javax/xml/package.html
new file mode 100644
index 0000000..2f52177
--- /dev/null
+++ b/java/external/src/javax/xml/package.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ javax.xml
+
+
+
+
+
+
+
+
+ Defines core XML constants and functionality from the XML specifications.
+
+ The following core XML standards apply:
+
+
+
+