Relaxer objects with the java.text option adds methods for text manipulation to Relaxer objects.
The java.text option takes one of the following values as a parameter:
The default configuration is true
.
No parameter implies that the parameter is true
.
The java.text option adds the following methods to Relaxer objects.
makeTextDocument()
makeTextElement(StringBuffer)
makeTextElement(Writer)
makeTextElement(PrintWriter)
makeTextAttribute(StringBuffer)
makeTextAttribute(Writer)
makeTextAttribute(PrintWriter)
getPropertyAsString()
setPropertyByString()
The java.text option also modifies behavior of following methods of Relaxer objects.
toString()
List 7.17.3.1[javaText.rng] is a sample schema for the java.text 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.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.
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
List 7.17.3.2.1[javaText.xml] is a valid XML document with regard to the RENAX NG schema javaText.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 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>
List 7.17.3.3.1[javaTextNs.rng] is a sample schema for the java.text option.
<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>
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.
List 7.17.3.5.1[javaTextNs.xml] is an XML document for testing.
<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.
<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>