Powered by SmartDoc

The java.sax.version option

The java.sax.version option specifies a SAX version to use.

Parameters

The java.sax.version option takes one of the following values as a parameter:

2
Uses the SAX version 2 as the SAX parser.
1
Uses the SAX version 1 as the SAX parser.

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.

Artifacts

The java.sax.version option adds appropriate algorithms to use the specified SAX parser.

Example

List 7.16.3.1[javaSaxVersion.rng] is a sample schema for the java.sax.version option.

javaSaxVersion.rng
<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>

Build

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.

JavaSaxVersion.java
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.

PrintDocumentHandler.java
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

Execution

List 7.16.3.2.1[javaSaxVersion.xml] is a valid XML document with regard to the RENAX NG schema javaSaxVersion.rng.

javaSaxVersion.xml
<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