Powered by SmartDoc

The java.pattern.idmap option

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

Parameter

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

true
Enables an idmap facility.
false
Disables an idmap facility.

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

Artifacts

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

Example

List 7.24.3.1[javaPatternIdmap.rng] is a sample schema for the java.pattern.idmap option.

javaPatternIdmap.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="id">
        <data type="ID"/>
      </attribute>
      <attribute name="zip">
        <data type="token"/>
      </attribute>
      <text/>
    </element>
  </define>
  <define name="phone">
    <element name="phone">
      <optional>
        <attribute name="id">
          <data type="ID"/>
        </attribute>
      </optional>
      <attribute name="area">
        <data type="token"/>
      </attribute>
      <data type="token"/>
    </element>
  </define>
</grammar>

Build

Execution of Relaxer with the java.pattern.idmap option is as follows:

$ relaxer -java -java.pattern.idmap javaPatternIdmap.rng

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

$ relaxer -java.pattern.idmap javaPatternIdmap.rng

As a result, Relaxer generates six files:

List 7.24.3.1.1[JavaPatternIdmap.java] is a sample program for the java.pattern.idmap option.

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

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

	String uri = args[0];
	Account account = makeAccount(uri);
	printAccount(account);
	findElementsById(account);
    }

    private static Account makeAccount(String uri)
	throws IOException, SAXException, ParserConfigurationException {

	System.out.println("*** makeAccount ***");
        IJavaPatternIdmapFactory factory
	    = JavaPatternIdmapFactory.getFactory();
	Account account = (Account)factory.createWithContext(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);
    }

    private static void findElementsById(Account account) {
	System.out.println("*** findElementsById ***");
	RContext context = account.rGetRContext();
	Address address = (Address)context.getIRNode("id_address");
	String zip = address.getZip();
	String place = address.getContent();
	System.out.println("Address: [" + zip + "] " + place);
	Phone phone = (Phone)context.getIRNode("id_phone");
	String area = phone.getArea();
	String number = phone.getContent();
	System.out.println("Phone: [" + area + "] " + number);
    }
}

Compilation of JavaPatternIdmap.java class is shown here:

$ javac JavaPatternIdmap.java

Execution

List 7.24.3.2.1[javapatternIdmap.xml] is an XML document for testing.

javapatternIdmap.xml
<account accountNo="12345">
  <balance>102030</balance>
  <owner>XML Taro</owner>
  <address zip="213" id="id_address">Yokohama</address>
  <phone area="123">456-7890</phone>
  <phone area="090" id="id_phone">123-4567</phone>
</account>

Execution of the JavaPatternIdmap class is shown here:

$ java JavaPatternIdmap javaPatternIdmap.xml
*** makeAccount ***
*** printAccount ***
AccountNo:12345
Balance:102030
Owner:XML Taro
Address: [213] Yokohama
Phone: [123] 456-7890
Phone: [090] 123-4567
XML:<account \
    accountNo="12345"><balance>102030</balance><owner>XML \
    Taro</owner><address id="id_address" \
    zip="213">Yokohama</address><phone \
    area="123">456-7890</phone><phone id="id_phone" \
    area="090">123-4567</phone></account>
*** findElementsById ***
Address: [213] Yokohama
Phone: [090] 123-4567