Powered by SmartDoc

The java.text option

Relaxer objects with the java.text option adds methods for text manipulation to Relaxer objects.

Parameters

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

true
adds text manipulation mehotds
false
does no add text manipulation mehotds

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

Artifacts

The java.text option adds the following methods to Relaxer objects.

The java.text option also modifies behavior of following methods of Relaxer objects.

Example

List 7.17.3.1[javaText.rng] is a sample schema for the java.text option.

javaText.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.text option is as follows:

$ relaxer -java -java.text javaText.rng

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

$ relaxer -java.text javaText.rng

As a result, Relaxer generates six files:

List 7.17.3.1.1[JavaText.java] is a sample program for the java.text option.

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

public class JavaText {
    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 JavaText.java is shown here:

$ javac JavaText.java

Execution

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

javaText.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 JavaText class for the valid document is shown here:

$ java JavaText javaText.xml
AccountNo:12345
Balance:102030
Owner:XML Taro
XML:<account \
    accountNo="12345"><balance>102030</balance><owner>XML \
    Taro</owner></account>

Namespace

List 7.17.3.3.1[javaTextNs.rng] is a sample schema for the java.text option.

javaTextNs.rng
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
         ns="http://example.com/account">
  <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.text option is as follows:

$ relaxer -java -java.text -java.xml.namespace javaText.rng

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

$ relaxer -java.text -java.xml.namespace javaText.rng

As a result, Relaxer generates 10 files:

Account.java and Address.java are Relaxer objects. URelaxer.java and RStack.java are fundamental utility classes. URelaxer2.java is a utility class for namespace operations. IRNSContainer.java and RNSContext.java are helper interface and object for namespace operations. IRNode is a helper interface for composite operations which are related the java.pattern.composite option.

Execution

List 7.17.3.5.1[javaTextNs.xml] is an XML document for testing.

javaTextNs.xml
<account xmlns="http://example.com/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 JavaText class is shown here:

$ java JavaText javaTextNs.xml
*** makeAccount ***
*** printAccount ***
AccountNo:12345
Balance:102030
Owner:XML Taro
Address: [213] Yokohama
Phone: [123] 456-7890
Phone: [090] 123-4567
*** showAccount ***
XML:<account xmlns="http://example.com/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>

List 7.17.3.5.2[javaTextNsPrefix.xml] is an XML document for testing.

javaTextNsPrefix.xml
<z:account xmlns:z="http://example.com/account" accountNo="12345">
  <z:balance>102030</z:balance>
  <z:owner>XML Taro</z:owner>
  <z:address zip="213">Yokohama</z:address>
  <z:phone area="123">456-7890</z:phone>
  <z:phone area="090">123-4567</z:phone>
</z:account>

Execution of JavaText class is shown here:

$ java JavaText javaTextNsPrefix.xml
*** makeAccount ***
*** printAccount ***
AccountNo:12345
Balance:102030
Owner:XML Taro
Address: [213] Yokohama
Phone: [123] 456-7890
Phone: [090] 123-4567
*** showAccount ***
XML:<z:account xmlns:z="http://example.com/account" \
    accountNo="12345"><z:balance>102030</z:balance><z:owner>XML \
    Taro</z:owner><z:address \
    zip="213">Yokohama</z:address><z:phone \
    area="123">456-7890</z:phone><z:phone \
    area="090">123-4567</z:phone></z:account>