Powered by SmartDoc

The java.jaxp option

The java.jaxp option enables a Relaxer object using JAXP to operate on XML documents. To specify the java.jaxp option, Relaxer objects support I/O methods for various external resources.

Parameters

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

true
Uses a JAXP parser.
false
Does not use a JAXP parser.

The default configuration is true. Using no parameter implies that the parameter is true.

Artifacts

A relaxer object with the java.jaxp option, following methods are added.

Methods in a Relaxer Objects are shown in Table 7.3.2.1[Methods of a Relaxer object methods].

Methods of a Relaxer object methods
method with java.jaxp without java.jaxp
Constructor() O O
Constructor(RStack) O O
Constructor(org.w3c.dom.Document) O O
Constructor(org.w3c.dom.Element) O O
Constructor(java.io.File) O -
Constructor(java.lang.String) O -
Constructor(java.net.URL) O -
Constructor(java.io.InputStream) O -
Constructor(org.xml.sax.InputSource) O -
Constructor(java.io.Reader) O -
setup(org.w3c.dom.Document) O O
setup(org.w3c.dom.Element) O O
setup(java.io.File) O -
setup(java.lang.String) O -
setup(java.net.URL) O -
setup(java.io.InputStream) O -
setup(org.xml.sax.InputSource) O -
setup(java.io.Reader) O -
makeDocument() O -
getAccountNo() O O
setAccountNo(java.lang.String) O O
getBalance() O O
setBalance(long) O O
getOwner() O O
setOwner(java.lang.String) O O
makeTextDocument() O O
makeTextElement(java.lang.StringBuffer) O O
makeTextElement(java.io.PrintWriter) O O
makeTextAttribute(java.lang.StringBuffer) O O
makeTextAttribute(java.io.PrintWriter) O O
getAccountNoAsString() O O
getBalanceAsString() O O
getOwnerAsString() O O
setBalanceByString(java.lang.String) O O
setOwnerByString(java.lang.String) O O
toString() O O
isMatch(org.w3c.dom.Element) O O
isMatch(RStack) O O
isMatchHungry() O O

Example

List 7.3.3.1[javaJaxp.rng] is a sample schema for the java.jaxp option.

javaJaxp.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>

Execution of Relaxer command with the java.jaxp option is as follows:

$ relaxer -java -java.jaxp javaJaxp.rng

Because the Java generator is a default generator, and the default value for the java.jaxp option is true, execution of Relaxer with the command shown below has the same effect:

$ relaxer javaJaxp.rng

As a result of both these commands, Relaxer generates six files:

List 7.3.3.2[JavaJaxp.java] is a sample program for the java.jaxp option.

JavaJaxp.java
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;

public class JavaJaxp {
    public static void main(String[] args)
	throws IOException, SAXException, ParserConfigurationException {

	String uri = args[0];
	Account account = makeAccount(uri);
	printAccount(account);
	showAccount(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);
    }
}

Compilation of JavaJaxp.java is shown here:

$ javac JavaJaxp.java
javaJaxp.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 JavaJaxp class follows:

$ java JavaJaxp javaJaxp.xml
*** makeAccount ***
*** printAccount ***
AccountNo:12345
Balance:102030
Owner:XML Taro
Address: [213] Yokohama
Phone: [123] 456-7890
Phone: [090] 123-4567
*** showAccount ***
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>