01: package com.sun.xml.xsom;
02:
03: import org.relaxng.datatype.ValidationContext;
04:
05: /**
06: * String with in-scope namespace binding information.
07: *
08: * <p>
09: * In a general case, text (PCDATA/attributes) that appear in XML schema
10: * cannot be correctly interpreted unless you also have in-scope namespace
11: * binding (a case in point is QName.) Therefore, it's convenient to
12: * handle the lexical representation and the in-scope namespace binding
13: * in a pair.
14: *
15: * @author Kohsuke Kawaguchi
16: */
17: public final class XmlString {
18: /**
19: * Textual value. AKA lexical representation.
20: */
21: public final String value;
22:
23: /**
24: * Used to resole in-scope namespace bindings.
25: */
26: public final ValidationContext context;
27:
28: /**
29: * Creates a new {@link XmlString} from a lexical representation and in-scope namespaces.
30: */
31: public XmlString(String value, ValidationContext context) {
32: this .value = value;
33: this .context = context;
34: if (context == null)
35: throw new IllegalArgumentException();
36: }
37:
38: /**
39: * Creates a new {@link XmlString} with empty in-scope namespace bindings.
40: */
41: public XmlString(String value) {
42: this (value, NULL_CONTEXT);
43: }
44:
45: /**
46: * Resolves a namespace prefix to the corresponding namespace URI.
47: *
48: * This method is used for resolving prefixes in the {@link #value}
49: * (such as when {@link #value} represents a QName type.)
50: *
51: * <p>
52: * If the prefix is "" (empty string), the method
53: * returns the default namespace URI.
54: *
55: * <p>
56: * If the prefix is "xml", then the method returns
57: * "http://www.w3.org/XML/1998/namespace",
58: * as defined in the XML Namespaces Recommendation.
59: *
60: * @return
61: * namespace URI of this prefix.
62: * If the specified prefix is not declared,
63: * the implementation returns null.
64: */
65: public final String resolvePrefix(String prefix) {
66: return context.resolveNamespacePrefix(prefix);
67: }
68:
69: public String toString() {
70: return value;
71: }
72:
73: private static final ValidationContext NULL_CONTEXT = new ValidationContext() {
74: public String resolveNamespacePrefix(String s) {
75: if (s.length() == 0)
76: return "";
77: if (s.equals("xml"))
78: return "http://www.w3.org/XML/1998/namespace";
79: return null;
80: }
81:
82: public String getBaseUri() {
83: return null;
84: }
85:
86: public boolean isUnparsedEntity(String s) {
87: return false;
88: }
89:
90: public boolean isNotation(String s) {
91: return false;
92: }
93: };
94: }
|