mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			205 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			205 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| This file describes the jaxp (xml processing) implementation of GNU Classpath.
 | |
| GNU Classpath includes interfaces and implementations for basic XML processing
 | |
| in in the java programming language, some general purpose SAX2 utilities, and
 | |
| transformation.
 | |
| 
 | |
| These classes used to be maintained as part of an external project GNU JAXP
 | |
| but are now integrated with the rest of the core class library provided by
 | |
| GNU Classpath.
 | |
| 
 | |
| PACKAGES
 | |
|     
 | |
| . javax.xml.* ... JAXP 1.3 interfaces
 | |
| 
 | |
| . gnu.xml.aelfred2.* ... SAX2 parser + validator
 | |
| . gnu.xml.dom.* ... DOM Level 3 Core, Traversal, XPath implementation
 | |
| . gnu.xml.dom.ls.* ... DOM Level 3 Load & Save implementation
 | |
| . gnu.xml.xpath.* ... JAXP XPath implementation
 | |
| . gnu.xml.transform.* ... JAXP XSL transformer implementation
 | |
| . gnu.xml.pipeline.* ... SAX2 event pipeline support
 | |
| . gnu.xml.stream.* ... StAX pull parser and SAX-over-StAX driver
 | |
| . gnu.xml.util.* ... various XML utility classes
 | |
| . gnu.xml.libxmlj.dom.* ... libxmlj DOM Level 3 Core and XPath
 | |
| . gnu.xml.libxmlj.sax.* ... libxmlj SAX parser
 | |
| . gnu.xml.libxmlj.transform.* ... libxmlj XSL transformer
 | |
| . gnu.xml.libxmlj.util.* ... libxmlj utility classes
 | |
| 
 | |
| In the external directory you can find the following packages.
 | |
| They are not maintained as part of GNU Classpath, but are used by the
 | |
| classes in the above packages.
 | |
| 
 | |
| . org.xml.sax.* ... SAX2 interfaces
 | |
| . org.w3c.dom.* ... DOM Level 3 interfaces
 | |
| . org.relaxng.datatype.* ... RELAX NG pluggable datatypes API
 | |
| 
 | |
| CONFORMANCE
 | |
| 
 | |
|     The primary test resources are at http://xmlconf.sourceforge.net
 | |
|     and include:
 | |
| 
 | |
|     SAX2/XML conformance tests
 | |
| 	That the "xml.testing.Driver" addresses the core XML 1.0
 | |
| 	specification requirements, which closely correspond to the
 | |
| 	functionality SAX1 provides.  The driver uses SAX2 APIs to
 | |
| 	test that functionality It is used with a bugfixed version of
 | |
| 	the NIST/OASIS XML conformance test cases.
 | |
| 	
 | |
| 	The AElfred2 parser is highly conformant, though it still takes
 | |
| 	a few implementation shortcuts.  See its package documentation
 | |
| 	for information about known XML conformance issues in AElfred2.
 | |
| 
 | |
| 	The primary issue is using Unicode character tables, rather than
 | |
| 	those in the XML specification, for determining what names are
 | |
| 	valid.  Most applications won't notice the difference, and this
 | |
| 	solution is smaller and faster than the alternative.
 | |
| 
 | |
| 	For validation, a secondary issue is that issues relating to
 | |
| 	entity modularity are not validated; they can't all be cleanly
 | |
| 	layered.  For example, validity constraints related to standalone
 | |
| 	declarations and PE nesting are not checked.
 | |
| 
 | |
|         The current implementation has also been tested against Elliotte
 | |
|         Rusty Harold's SAXTest test suite (http://www.cafeconleche.org/SAXTest)
 | |
|         and achieves approximately 93% conformance to the SAX specification
 | |
|         according to these tests, higher than any other current Java parser.
 | |
| 
 | |
|     SAX2
 | |
| 	SAX2 API conformance currently has a minimal JUNIT (0.2) test suite,
 | |
| 	which can be accessed at the xmlconf site listed above.  It does
 | |
| 	not cover namespaces or LexicalHandler and Declhandler extensions
 | |
| 	anywhere as exhaustively as the SAX1 level functionality is
 | |
| 	tested by the "xml.testing.Driver".  However:
 | |
| 
 | |
| 	    - Applying the DOM unit tests to this implementation gives
 | |
| 	      the LexicalHandler (comments, and boundaries of DTDs,
 | |
| 	      CDATA sections, and general entities) a workout, and
 | |
| 	      does the same for DeclHandler entity declarations.
 | |
| 	    
 | |
| 	    - The pipeline package's layered validator demands that
 | |
| 	      element and attribute declarations are reported correctly.
 | |
| 	
 | |
| 	By those metrics, SAX2 conformance for AElfred2 is also strong. 
 | |
|     
 | |
|     DOM Level 3 Core Tests
 | |
|         The DOM implementation has been tested against the W3C DOM Level 3
 | |
|         Core conformance test suite (http://www.w3.org/DOM/Test/). Current
 | |
|         conformance according to these tests is 72.3%. Many of the test
 | |
|         failures are due to the fact that GNU JAXP does not currently
 | |
|         provide any W3C XML Schema support.
 | |
| 
 | |
|     XSL transformation
 | |
|         The transformer and XPath implementation have been tested against
 | |
|         the OASIS XSLT and XPath TC test suite. Conformance against the
 | |
|         Xalan tests is currently 77%.
 | |
| 
 | |
| 
 | |
| libxmlj
 | |
| ========================================================================
 | |
| 
 | |
| libxmlj is an effort to create a 100% JAXP-compatible Java wrapper for
 | |
| libxml2 and libxslt. JAXP is the Java API for XML processing, libxml2
 | |
| is the XML C library for Gnome, and libxslt is the XSLT C library for
 | |
| Gnome.
 | |
| 
 | |
| libxmlj currently supports most of the DOM Level 3 Core, Traversal, and
 | |
| XPath APIs, SAX2, and XSLT transformations. There is no W3C XML Schema
 | |
| support yet.
 | |
| 
 | |
| libxmlj can parse and transform XML documents extremely quickly in
 | |
| comparison to Java-based JAXP implementations. DOM manipulations, however,
 | |
| involve JNI overhead, so the speed of DOM tree construction and traversal
 | |
| can be slower than the Java implementation.
 | |
| 
 | |
| libxmlj is highly experimental, doesn't always conform to the DOM
 | |
| specification correctly, and may leak memory. Production use is not advised.
 | |
| 
 | |
| The implementation can be found in gnu/xml/libxmlj and native/jni/xmlj.
 | |
| See the INSTALL file for the required versions of libxml2 and libxslt.
 | |
| configure --enable-xmlj will build it.
 | |
| 
 | |
| Usage
 | |
| ------------------------------------------------------------------------
 | |
| 
 | |
| To enable the various GNU JAXP factories, set the following system properties
 | |
| (command-line version shown, but they can equally be set programmatically):
 | |
| 
 | |
|   AElfred2:
 | |
|    -Djavax.xml.parsers.SAXParserFactory=gnu.xml.aelfred2.JAXPFactory
 | |
| 
 | |
|   GNU DOM (using DOM Level 3 Load & Save):
 | |
|    -Djavax.xml.parsers.DocumentBuilderFactory=gnu.xml.dom.DomDocumentBuilderFactory
 | |
| 
 | |
|   GNU DOM (using AElfred-only pipeline classes):
 | |
|    -Djavax.xml.parsers.DocumentBuilderFactory=gnu.xml.dom.JAXPFactory
 | |
| 
 | |
|   GNU XSL transformer:
 | |
|    -Djavax.xml.transform.TransformerFactory=gnu.xml.transform.TransformerFactoryImpl
 | |
| 
 | |
|   GNU StAX:
 | |
|    -Djavax.xml.stream.XMLEventFactory=gnu.xml.stream.XMLEventFactoryImpl
 | |
|    -Djavax.xml.stream.XMLInputFactory=gnu.xml.stream.XMLInputFactoryImpl
 | |
|    -Djavax.xml.stream.XMLOutputFactory=gnu.xml.stream.XMLOutputFactoryImpl
 | |
| 
 | |
|   GNU SAX-over-StAX:
 | |
|    -Djavax.xml.parsers.SAXParserFactory=gnu.xml.stream.SAXParserFactory
 | |
| 
 | |
|   libxmlj SAX:
 | |
|    -Djavax.xml.parsers.SAXParserFactory=gnu.xml.libxmlj.sax.GnomeSAXParserFactory
 | |
| 
 | |
|   libxmlj DOM:
 | |
|    -Djavax.xml.parsers.DocumentBuilderFactory=gnu.xml.libxmlj.dom.GnomeDocumentBuilderFactory
 | |
| 
 | |
|   libxmlj XSL transformer:
 | |
|    -Djavax.xml.transform.TransformerFactory=gnu.xml.libxmlj.transform.GnomeTransformerFactory
 | |
| 
 | |
| When using libxmlj, the libxmlj shared library must be available.
 | |
| In general it is picked up by the runtime using GNU Classpath. If not you
 | |
| might want to try adding the directory where libxmlj.so is installed
 | |
| (by default ${prefix}/lib/classpath/) with ldconfig or specifying in the
 | |
| LD_LIBRARY_PATH environment variable. Additionally, you may need to specify
 | |
| the location of your shared libraries to the runtime environment using the
 | |
| java.library.path system property.
 | |
| 
 | |
| Missing (libxmlj) Features
 | |
| ------------------------------------------------------------------------ 
 | |
| 
 | |
| See BUGS in native/jni/xmlj for known bugs in the libxmlj native bindings.
 | |
| 
 | |
| This implementation should be thread-safe, but currently all
 | |
| transformation requests are queued via Java synchronization, which
 | |
| means that it effectively performs single-threaded. Long story short,
 | |
| both libxml2 and libxslt are not fully reentrant.  
 | |
| 
 | |
| Update: it may be possible to make libxmlj thread-safe nonetheless
 | |
| using thread context variables.
 | |
| 
 | |
| Update: thread context variables have been introduced. This is very
 | |
| untested though, libxmlj therefore still has the single thread
 | |
| bottleneck.
 | |
| 
 | |
| 
 | |
| Validation
 | |
| ===================================================
 | |
| 
 | |
| Pluggable datatypes
 | |
| ---------------------------------------------------
 | |
| Validators should use the RELAX NG pluggable datatypes API to retrieve
 | |
| datatype (XML Schema simple type) implementations in a schema-neutral
 | |
| fashion. The following code demonstrates looking up a W3C XML Schema
 | |
| nonNegativeInteger datatype:
 | |
| 
 | |
|   DatatypeLibrary xsd = DatatypeLibraryLoader
 | |
|     .createDatatypeLibrary(XMLConstants.W3C_XML_SCHEMA_NS_URI);
 | |
|   Datatype nonNegativeInteger = xsd.createDatatype("nonNegativeInteger");
 | |
| 
 | |
| It is also possible to create new types by derivation. For instance,
 | |
| to create a datatype that will match a US ZIP code:
 | |
| 
 | |
|   DatatypeBuilder b = xsd.createDatatypeBuilder("string");
 | |
|   b.addParameter("pattern", "(^[0-9]{5}$)|(^[0-9]{5}-[0-9]{4}$)");
 | |
|   Datatype zipCode = b.createDatatype();
 | |
| 
 | |
| A datatype library implementation for XML Schema is provided; other
 | |
| library implementations may be added.
 | |
| 
 |