The java.sax.version option specifies a SAX version to use.
The java.sax.version option takes one of the following values as a parameter:
The default configuration is 2
.
Note that if you use the java.xml.namespace option, the java.sax.version option is ignored and SAX 2 parser is used to handle namespaces.
The java.sax.version option adds appropriate algorithms to use the specified SAX parser.
List 7.16.3.1[javaSaxVersion.rng] is a sample schema for the java.sax.version option.
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <start> <ref name="account"/> </start> <define name="account"> <element name="account"> <attribute name="accountNo"> <data type="token"/> </attribute> <element name="balance"> <data type="int"/> </element> <element name="owner"> <data type="token"/> </element> <optional> <ref name="address"/> </optional> <zeroOrMore> <ref name="phone"/> </zeroOrMore> </element> </define> <define name="address"> <element name="address"> <attribute name="zip"> <data type="token"/> </attribute> <text/> </element> </define> <define name="phone"> <element name="phone"> <attribute name="area"> <data type="token"/> </attribute> <data type="token"/> </element> </define> </grammar>
Execution of Relaxer with the java.sax.version option is as follows:
$ relaxer -java -java.sax -java.sax.version javaSaxVersion.rng
Because the Java generator is a default generator, execution of Relaxer as shown below has the same effect:
$ relaxer -java.sax -java.sax.version javaSaxVersion.rng
As a result, Relaxer generates ten files:
List 7.16.3.1.1[JavaSaxVersion.java] is a sample program for the java.sax.version option.
import java.io.IOException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.ParserConfigurationException; import org.xml.sax.SAXException; import java.io.File; public class JavaSaxVersion { public static void main(String[] args) throws IOException, SAXException, ParserConfigurationException { String filename = args[0]; Account account = makeAccount(filename); printAccount(account); showAccount(account); makeSAXEvent(account); } private static Account makeAccount(String uri) throws IOException, SAXException, ParserConfigurationException { System.out.println("*** makeAccount ***"); Account account = new Account(uri); return (account); } private static void printAccount(Account account) { System.out.println("*** printAccount ***"); String accountNo = account.getAccountNo(); long balance = account.getBalance(); String owner = account.getOwner(); System.out.println("AccountNo:" + accountNo); System.out.println("Balance:" + balance); System.out.println("Owner:" + owner); Address address = account.getAddress(); if (address != null) { String zip = address.getZip(); String place = address.getContent(); System.out.println("Address: [" + zip + "] " + place); } Phone[] phones = account.getPhone(); for (int i = 0;i < phones.length;i++) { Phone phone = phones[i]; String area = phone.getArea(); String number = phone.getContent(); System.out.println("Phone: [" + area + "] " + number); } } private static void showAccount(Account account) { System.out.println("*** showAccount ***"); System.out.println("XML:" + account); } private static void makeSAXEvent(Account account) throws SAXException { System.out.println("*** makeSAXEvent ***"); PrintDocumentHandler handler = new PrintDocumentHandler(); account.makeDocument(handler); } }
List 7.16.3.1.2[PrintDocumentHandler.java] is a SAX DocumentHandler to print sax events generated by Relaxer objects.
import org.xml.sax.HandlerBase; import org.xml.sax.AttributeList; public class PrintDocumentHandler extends HandlerBase { public void startDocument () { System.out.println("Start Document"); } public void endDocument () { System.out.println("End Document"); } public void startElement(String name, AttributeList atts) { System.out.println("Start Element = " + name); int size = atts.getLength(); for (int i = 0;i < size;i++) { String attrName = atts.getName(i); String attrValue = atts.getValue(i); System.out.println(" (Attr) " + attrName + " = " + attrValue); } } public void endElement(String name) { System.out.println("End Element = " + name); } public void characters(char ch[], int start, int length) { System.out.println("Text = " + new String(ch, start, length)); } }
Compilation of JavaSaxVersion.java
is shown here:
$ javac JavaSaxVersion.java
List 7.16.3.2.1[javaSaxVersion.xml] is a valid XML document with regard to the RENAX NG schema javaSaxVersion.rng.
<account accountNo="12345"> <balance>102030</balance> <owner>XML Taro</owner> <address zip="213">Yokohama</address> <phone area="123">456-7890</phone> <phone area="090">123-4567</phone> </account>
Execution of the JavaSaxVersion
for the valid document is shown here:
$ java JavaSaxVersion javaSaxVersion.xml AccountNo:12345 Balance:102030 Owner:XML Taro Address: [213] Yokohama XML:<account \ accountNo="12345"><balance>102030</balance><owner>XML \ Taro</owner><address zip="213">Yokohama</address></account> Start Document Start Element = account (Attr) accountNo = 12345 Start Element = balance Text = 102030 End Element = balance Start Element = owner Text = XML Taro End Element = owner Start Element = address (Attr) zip = 213 Text = Yokohama End Element = address End Element = account End Document