1 /*
2  * Copyright (c) 2003, 2018, 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 
26 package javax.xml;
27 
28 /**
29  * <p>Utility class to contain basic XML values as constants.
30  *
31  * @author Jeff Suttor
32  * @see <a href="http://www.w3.org/TR/xml11/">Extensible Markup Language (XML) 1.1</a>
33  * @see <a href="http://www.w3.org/TR/REC-xml">Extensible Markup Language (XML) 1.0 (Second Edition)</a>
34  * @see <a href="http://www.w3.org/XML/xml-V10-2e-errata">XML 1.0 Second Edition Specification Errata</a>
35  * @see <a href="http://www.w3.org/TR/xml-names11/">Namespaces in XML 1.1</a>
36  * @see <a href="http://www.w3.org/TR/REC-xml-names">Namespaces in XML</a>
37  * @see <a href="http://www.w3.org/TR/xmlschema-1/">XML Schema Part 1: Structures</a>
38  * @since 1.5
39  **/
40 
41 public final class XMLConstants {
42 
43     /**
44      * Private constructor to prevent instantiation.
45      */
XMLConstants()46     private XMLConstants() {
47     }
48 
49     /**
50      * Namespace URI to use to represent that there is no Namespace.
51      *
52      * <p>Defined by the Namespace specification to be "".
53      *
54      * @see <a href="http://www.w3.org/TR/REC-xml-names/#defaulting">
55      * Namespaces in XML, 5.2 Namespace Defaulting</a>
56      */
57     public static final String NULL_NS_URI = "";
58 
59     /**
60      * Prefix to use to represent the default XML Namespace.
61      *
62      * <p>Defined by the XML specification to be "".
63      *
64      * @see <a
65      * href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">
66      * Namespaces in XML, 3. Qualified Names</a>
67      */
68     public static final String DEFAULT_NS_PREFIX = "";
69 
70     /**
71      * The official XML Namespace name URI.
72      *
73      * <p>Defined by the XML specification to be
74      * "{@code http://www.w3.org/XML/1998/namespace}".
75      *
76      * @see <a
77      * href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">
78      * Namespaces in XML, 3. Qualified Names</a>
79      */
80     public static final String XML_NS_URI =
81         "http://www.w3.org/XML/1998/namespace";
82 
83     /**
84      * The official XML Namespace prefix.
85      *
86      * <p>Defined by the XML specification to be "{@code xml}".
87      *
88      * @see <a
89      * href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">
90      * Namespaces in XML, 3. Qualified Names</a>
91      */
92     public static final String XML_NS_PREFIX = "xml";
93 
94     /**
95      * The official XML attribute used for specifying XML Namespace
96      * declarations, {@link #XMLNS_ATTRIBUTE
97      * XMLConstants.XMLNS_ATTRIBUTE}, Namespace name URI.
98      *
99      * <p>Defined by the XML specification to be
100      * "{@code http://www.w3.org/2000/xmlns/}".
101      *
102      * @see <a
103      * href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">
104      * Namespaces in XML, 3. Qualified Names</a>
105      */
106     public static final String XMLNS_ATTRIBUTE_NS_URI =
107         "http://www.w3.org/2000/xmlns/";
108 
109     /**
110      * The official XML attribute used for specifying XML Namespace
111      * declarations.
112      *
113      * <p>It is <strong><em>NOT</em></strong> valid to use as a
114      * prefix.  Defined by the XML specification to be
115      * "{@code xmlns}".
116      *
117      * @see <a
118      * href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">
119      * Namespaces in XML, 3. Qualified Names</a>
120      */
121     public static final String XMLNS_ATTRIBUTE = "xmlns";
122 
123     /**
124      * W3C XML Schema Namespace URI.
125      *
126      * <p>Defined to be "{@code http://www.w3.org/2001/XMLSchema}".
127      *
128      * @see <a href=
129      *  "http://www.w3.org/TR/xmlschema-1/#Instance_Document_Constructions">
130      *  XML Schema Part 1:
131      *  Structures, 2.6 Schema-Related Markup in Documents Being Validated</a>
132      */
133     public static final String W3C_XML_SCHEMA_NS_URI =
134         "http://www.w3.org/2001/XMLSchema";
135 
136     /**
137      * W3C XML Schema Instance Namespace URI.
138      *
139      * <p>Defined to be "{@code http://www.w3.org/2001/XMLSchema-instance}".
140      *
141      * @see <a href=
142      *  "http://www.w3.org/TR/xmlschema-1/#Instance_Document_Constructions">
143      *  XML Schema Part 1:
144      *  Structures, 2.6 Schema-Related Markup in Documents Being Validated</a>
145      */
146     public static final String W3C_XML_SCHEMA_INSTANCE_NS_URI =
147         "http://www.w3.org/2001/XMLSchema-instance";
148 
149     /**
150      * W3C XPath Datatype Namespace URI.
151      *
152      * <p>Defined to be "{@code http://www.w3.org/2003/11/xpath-datatypes}".
153      *
154      * @see <a href="http://www.w3.org/TR/xpath-datamodel">XQuery 1.0 and XPath 2.0 Data Model</a>
155      */
156     public static final String W3C_XPATH_DATATYPE_NS_URI = "http://www.w3.org/2003/11/xpath-datatypes";
157 
158     /**
159      * XML Document Type Declaration Namespace URI as an arbitrary value.
160      *
161      * <p>Since not formally defined by any existing standard, arbitrarily define to be "{@code http://www.w3.org/TR/REC-xml}".
162      */
163     public static final String XML_DTD_NS_URI = "http://www.w3.org/TR/REC-xml";
164 
165         /**
166          * RELAX NG Namespace URI.
167          *
168          * <p>Defined to be "{@code http://relaxng.org/ns/structure/1.0}".
169          *
170          * @see <a href="http://relaxng.org/spec-20011203.html">RELAX NG Specification</a>
171          */
172         public static final String RELAXNG_NS_URI = "http://relaxng.org/ns/structure/1.0";
173 
174         /**
175          * Feature for secure processing.
176          *
177          * <ul>
178          *   <li>
179          *     {@code true} instructs the implementation to process XML securely.
180          *     This may set limits on XML constructs to avoid conditions such as denial of service attacks.
181          *   </li>
182          *   <li>
183          *     {@code false} instructs the implementation to process XML in accordance with the XML specifications
184          *     ignoring security issues such as limits on XML constructs to avoid conditions such as denial of service attacks.
185          *   </li>
186          * </ul>
187          */
188         public static final String FEATURE_SECURE_PROCESSING = "http://javax.xml.XMLConstants/feature/secure-processing";
189 
190 
191         /**
192          * Property: accessExternalDTD
193          *
194          * <p>
195          * Restrict access to external DTDs and external Entity References to the protocols specified.
196          * If access is denied due to the restriction of this property, a runtime exception that
197          * is specific to the context is thrown. In the case of {@link javax.xml.parsers.SAXParser}
198          * for example, {@link org.xml.sax.SAXException} is thrown.
199          *
200          * <p>
201          * <b>Value: </b> a list of protocols separated by comma. A protocol is the scheme portion of a
202          * {@link java.net.URI}, or in the case of the JAR protocol, "jar" plus the scheme portion
203          * separated by colon.
204          * A scheme is defined as:
205          *
206          * <blockquote>
207          * scheme = alpha *( alpha | digit | "+" | "-" | "." )<br>
208          * where alpha = a-z and A-Z.<br><br>
209          *
210          * And the JAR protocol:<br>
211          *
212          * jar[:scheme]<br><br>
213          *
214          * Protocols including the keyword "jar" are case-insensitive. Any whitespaces as defined by
215          * {@link java.lang.Character#isSpaceChar } in the value will be ignored.
216          * Examples of protocols are file, http, jar:file.
217          *
218          * </blockquote>
219          *
220          *<p>
221          * <b>Default value:</b> The default value is implementation specific and therefore not specified.
222          * The following options are provided for consideration:
223          * <blockquote>
224          * <UL>
225          *     <LI>an empty string to deny all access to external references;</LI>
226          *     <LI>a specific protocol, such as file, to give permission to only the protocol;</LI>
227          *     <LI>the keyword "all" to grant  permission to all protocols.</LI>
228          * </UL><br>
229          *      When FEATURE_SECURE_PROCESSING is enabled,  it is recommended that implementations
230          *      restrict external connections by default, though this may cause problems for applications
231          *      that process XML/XSD/XSL with external references.
232          * </blockquote>
233          *
234          * <p>
235          * <b>Granting all access:</b>  the keyword "all" grants permission to all protocols.
236          *
237          * <p>
238          * <b>System Property:</b> The value of this property can be set or overridden by
239          * system property {@code javax.xml.accessExternalDTD}.
240          *
241          *
242          * <p>
243          * <b>jaxp.properties:</b> This configuration file is in standard
244          * {@link java.util.Properties} format and typically located in the {@code conf}
245          * directory of the Java installation. If the file exists and the system
246          * property is specified, its value will be used to override the default
247          * of the property.
248          *
249          *
250          * @since 1.7
251          */
252         public static final String ACCESS_EXTERNAL_DTD = "http://javax.xml.XMLConstants/property/accessExternalDTD";
253 
254         /**
255          * <p>Property: accessExternalSchema</p>
256          *
257          * <p>
258          * Restrict access to the protocols specified for external reference set by the
259          * schemaLocation attribute, Import and Include element. If access is denied
260          * due to the restriction of this property, a runtime exception that is specific
261          * to the context is thrown. In the case of {@link javax.xml.validation.SchemaFactory}
262          * for example, org.xml.sax.SAXException is thrown.
263          *
264          * <p>
265          * <b>Value:</b> a list of protocols separated by comma. A protocol is the scheme portion of a
266          * {@link java.net.URI}, or in the case of the JAR protocol, "jar" plus the scheme portion
267          * separated by colon.
268          * A scheme is defined as:
269          *
270          * <blockquote>
271          * scheme = alpha *( alpha | digit | "+" | "-" | "." )<br>
272          * where alpha = a-z and A-Z.<br><br>
273          *
274          * And the JAR protocol:<br>
275          *
276          * jar[:scheme]<br><br>
277          *
278          * Protocols including the keyword "jar" are case-insensitive. Any whitespaces as defined by
279          * {@link java.lang.Character#isSpaceChar } in the value will be ignored.
280          * Examples of protocols are file, http, jar:file.
281          *
282          * </blockquote>
283          *
284          * <p>
285          * <b>Default value:</b> The default value is implementation specific and therefore not specified.
286          * The following options are provided for consideration:
287          * <blockquote>
288          * <UL>
289          *     <LI>an empty string to deny all access to external references;</LI>
290          *     <LI>a specific protocol, such as file, to give permission to only the protocol;</LI>
291          *     <LI>the keyword "all" to grant  permission to all protocols.</LI>
292          * </UL><br>
293          *      When FEATURE_SECURE_PROCESSING is enabled,  it is recommended that implementations
294          *      restrict external connections by default, though this may cause problems for applications
295          *      that process XML/XSD/XSL with external references.
296          * </blockquote>
297          *
298          * <p>
299          * <b>Granting all access:</b>  the keyword "all" grants permission to all protocols.
300          *
301          * <p>
302          * <b>System Property:</b> The value of this property can be set or overridden by
303          * system property {@code javax.xml.accessExternalSchema}
304          *
305          * <p>
306          * <b>jaxp.properties:</b> This configuration file is in standard
307          * {@link java.util.Properties} format and typically located in the {@code conf}
308          * directory of the Java installation. If the file exists and the system
309          * property is specified, its value will be used to override the default
310          * of the property.
311          *
312          * @since 1.7
313          */
314         public static final String ACCESS_EXTERNAL_SCHEMA = "http://javax.xml.XMLConstants/property/accessExternalSchema";
315 
316         /**
317          * Property: accessExternalStylesheet
318          *
319          * <p>
320          * Restrict access to the protocols specified for external references set by the
321          * stylesheet processing instruction, Import and Include element, and document function.
322          * If access is denied due to the restriction of this property, a runtime exception
323          * that is specific to the context is thrown. In the case of constructing new
324          * {@link javax.xml.transform.Transformer} for example,
325          * {@link javax.xml.transform.TransformerConfigurationException}
326          * will be thrown by the {@link javax.xml.transform.TransformerFactory}.
327          *
328          * <p>
329          * <b>Value:</b> a list of protocols separated by comma. A protocol is the scheme portion of a
330          * {@link java.net.URI}, or in the case of the JAR protocol, "jar" plus the scheme portion
331          * separated by colon.
332          * A scheme is defined as:
333          *
334          * <blockquote>
335          * scheme = alpha *( alpha | digit | "+" | "-" | "." )<br>
336          * where alpha = a-z and A-Z.<br><br>
337          *
338          * And the JAR protocol:<br>
339          *
340          * jar[:scheme]<br><br>
341          *
342          * Protocols including the keyword "jar" are case-insensitive. Any whitespaces as defined by
343          * {@link java.lang.Character#isSpaceChar } in the value will be ignored.
344          * Examples of protocols are file, http, jar:file.
345          *
346          * </blockquote>
347          *
348          * <p>
349          * <b>Default value:</b> The default value is implementation specific and therefore not specified.
350          * The following options are provided for consideration:
351          * <blockquote>
352          * <UL>
353          *     <LI>an empty string to deny all access to external references;</LI>
354          *     <LI>a specific protocol, such as file, to give permission to only the protocol;</LI>
355          *     <LI>the keyword "all" to grant  permission to all protocols.</LI>
356          * </UL><br>
357          *      When FEATURE_SECURE_PROCESSING is enabled,  it is recommended that implementations
358          *      restrict external connections by default, though this may cause problems for applications
359          *      that process XML/XSD/XSL with external references.
360          * </blockquote>
361          *
362          * <p>
363          * <b>Granting all access:</b>  the keyword "all" grants permission to all protocols.
364          *
365          * <p>
366          * <b>System Property:</b> The value of this property can be set or overridden by
367          * system property {@code javax.xml.accessExternalStylesheet}
368          *
369          * <p>
370          * <b>jaxp.properties:</b> This configuration file is in standard
371          * {@link java.util.Properties} format and typically located in the {@code conf}
372          * directory of the Java installation. If the file exists and the system
373          * property is specified, its value will be used to override the default
374          * of the property.
375          *
376          * @since 1.7
377          */
378         public static final String ACCESS_EXTERNAL_STYLESHEET = "http://javax.xml.XMLConstants/property/accessExternalStylesheet";
379 
380 
381         /**
382          * Feature: useCatalog
383          *
384          * <p>
385          * Instructs XML processors to use XML Catalogs to resolve entity references.
386          * Catalogs may be set through JAXP factories, system properties, or
387          * jaxp.properties by using the {@code javax.xml.catalog.files} property
388          * defined in {@link javax.xml.catalog.CatalogFeatures}.
389          * The following code enables Catalog on SAX parser:
390          * <pre>{@code
391          *      SAXParserFactory spf = SAXParserFactory.newInstance();
392          *      spf.setFeature(XMLConstants.USE_CATALOG, true);
393          *      SAXParser parser = spf.newSAXParser();
394          *      parser.setProperty(CatalogFeatures.Feature.FILES.getPropertyName(), "catalog.xml");
395          * }</pre>
396          *
397          * <p>
398          * <b>Value:</b> a boolean. If the value is true, and a catalog is set,
399          * the XML parser will resolve external references using
400          * {@link javax.xml.catalog.CatalogResolver}. If the value is false,
401          * XML Catalog is ignored even if one is set. The default value is true.
402          *
403          * <p>
404          * <b>System Property:</b> The value of this property can be set or overridden by
405          * system property {@code javax.xml.useCatalog}
406          *
407          * <p>
408          * <b>jaxp.properties:</b> This configuration file is in standard
409          * {@link java.util.Properties} format and typically located in the {@code conf}
410          * directory of the Java installation. If the file exists and the system
411          * property is specified, its value will be used to override the default
412          * value of the property.
413          *
414          * @since 9
415          */
416         public static final String USE_CATALOG = "http://javax.xml.XMLConstants/feature/useCatalog";
417 
418 }
419