Powered by SmartDoc

The java.pattern.interpreter option

The java.pattern.interpreter option enables an interpreter facility for Relaxer objects.

Parameters

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

true
Enables an interpreter facility.
false
Disables an interpreter facility.

The default configuration is false. No parameter implies that the parameter is 'true'.

Artifacts

The java.pattern.composite option generates additional classes as follows:

The java.pattern.interpreter option adds the following methods to Relaxer objects.

The rGetParentRNode mehtod, the rSetParentRNode method, and the rGetRNodes methods are derived from the java.pattern.composite option.

Three eval methods are methods for interpreter.

Example

List 7.22.3.1[javaPatternInterpreter.rng] is a sample schema for the java.pattern.interpreter option.

javaPatternInterpreter.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>
      <ref name="address"/>
      <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.pattern.interpreter option is as follows:

$ relaxer -java -java.pattern.interpreter \
    javaPatternInterpreter.rng

Because the Java generator is a default generator, execution of Relaxer as shown below has the same effect:

$ relaxer -java.pattern.interpreter javaPatternInterpreter.rng

As a result, Relaxer generates six files:

List 7.22.3.1.1[JavaPatternInterpreter.java] is a sample program for the java.pattern.interpreter option.

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

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

	String uri = args[0];
	Account account = makeAccount(uri);
	printAccount(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();
	Address address = account.getAddress();
	String zip = address.getZip();
	String place = address.getContent();
	System.out.println("AccountNo:" + accountNo);
	System.out.println("Balance:" + balance);
	System.out.println("Owner:" + owner);
	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);
	}
	System.out.println("XML:" + account);
    }
}

Compilation of JavaPatternInterpreter class is shown here:

$ javac JavaPatternInterpreter.java

Execution

List 7.22.3.2.1[javaPatternInterpreter.xml] is an XML document for testing.

javaPatternInterpreter.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 JavaPatternInterpreter class is shown here:

$ java JavaPatternInterpreter javaPatternInterpreter.xml
AccountNo:12345
Balance:102030
Owner:XML Taro
XML:<account xmlns="http://example.com/account" \
    accountNo="12345"><balance>102030</balance><owner>XML \
    Taro</owner></account>