1/* 2 * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26package com.sun.xml.internal.xsom; 27 28import com.sun.xml.internal.org.relaxng.datatype.ValidationContext; 29 30/** 31 * String with in-scope namespace binding information. 32 * 33 * <p> 34 * In a general case, text (PCDATA/attributes) that appear in XML schema 35 * cannot be correctly interpreted unless you also have in-scope namespace 36 * binding (a case in point is QName.) Therefore, it's convenient to 37 * handle the lexical representation and the in-scope namespace binding 38 * in a pair. 39 * 40 * @author Kohsuke Kawaguchi 41 */ 42public final class XmlString { 43 /** 44 * Textual value. AKA lexical representation. 45 */ 46 public final String value; 47 48 /** 49 * Used to resole in-scope namespace bindings. 50 */ 51 public final ValidationContext context; 52 53 /** 54 * Creates a new {@link XmlString} from a lexical representation and in-scope namespaces. 55 */ 56 public XmlString(String value, ValidationContext context) { 57 this.value = value; 58 this.context = context; 59 if(context==null) 60 throw new IllegalArgumentException(); 61 } 62 63 /** 64 * Creates a new {@link XmlString} with empty in-scope namespace bindings. 65 */ 66 public XmlString(String value) { 67 this(value,NULL_CONTEXT); 68 } 69 70 /** 71 * Resolves a namespace prefix to the corresponding namespace URI. 72 * 73 * This method is used for resolving prefixes in the {@link #value} 74 * (such as when {@link #value} represents a QName type.) 75 * 76 * <p> 77 * If the prefix is "" (empty string), the method 78 * returns the default namespace URI. 79 * 80 * <p> 81 * If the prefix is "xml", then the method returns 82 * "http://www.w3.org/XML/1998/namespace", 83 * as defined in the XML Namespaces Recommendation. 84 * 85 * @return 86 * namespace URI of this prefix. 87 * If the specified prefix is not declared, 88 * the implementation returns null. 89 */ 90 public final String resolvePrefix(String prefix) { 91 return context.resolveNamespacePrefix(prefix); 92 } 93 94 public String toString() { 95 return value; 96 } 97 98 private static final ValidationContext NULL_CONTEXT = new ValidationContext() { 99 public String resolveNamespacePrefix(String s) { 100 if(s.length()==0) return ""; 101 if(s.equals("xml")) return "http://www.w3.org/XML/1998/namespace"; 102 return null; 103 } 104 105 public String getBaseUri() { 106 return null; 107 } 108 109 public boolean isUnparsedEntity(String s) { 110 return false; 111 } 112 113 public boolean isNotation(String s) { 114 return false; 115 } 116 }; 117} 118