<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
   <title>Proposal for BeanUtils Package</title>
</head>
<body bgcolor="#FFFFFF">

<center>
<h1>
Proposal for <i>JXPath</i> Package</h1></center>

<h3>
(0) Rationale</h3>
In heterogenous techologies like Struts, XML documents are combined with
object graphs consisting of JavaBeans, collections, arrays, maps and primitive
values. In such systems there is a need for a consistent way of referencing
both parts of XML documents and elements of object graphs.&nbsp; XPath
is a powerful language introduced by W3C (<a href="http://www.w3.org/TR/xpath">XML
Path Language</a>) as a common format for addressing elements of XML documents.&nbsp;
The proposed <i>JXPath </i>component provides a mechanism for applying the
same XPath language to generic object graphs.
<h3>
(1) Scope of the Package</h3>
This proposal is to create a package of Java utility methods for accessing
and modifying the elements of arbitrary graphs consisting of JavaBeans,
collections, arrays, maps and primitive values using the XPath syntax.
This package will (at least initially) depend on an external implementation
of an XPath expression processor.
<p>This package augments BeanUtils, which provides a lighter-weight reference
format.
<h3>
(1.5) Interaction With Other Packages</h3>
JXPath relies on
<ul>
<li>
Java Development Kit (Version 1.2 or later)</li>

<li>
A JAXP 1.1 implementation</li>

<li>
An XPath interpreter implementation. Initially the package will only support
the interpreter provided by the Apache Xalan project, but will have an
extensibility mechanism that will allow adding alternative XPath processors
later.</li>
</ul>
No external configuration files are utilized.
<h3>
(2) Initial Source of the Package</h3>
The original source of the component was donated by PLOTNIX, Inc (<a href="http://www.plotnix.com">www.plotnix.com</a>).
<p>The proposed package names for the new component are
<ul>
<li>
<tt>org.apache.commons.jxpath</tt> for the main API package</li>

<li>
<tt>org.apache.commons.jxpath.tree </tt>for a light-weight DOM-JavaBeans
API adapter</li>

<li>
<tt>org.apache.commons.jxpath.xalan </tt>for a Xalan XPath interpreter adapter</li>
</ul>

<h3>
(3) Required Jakarta-Commons Resources</h3>

<ul>
<li>
CVS Repository - New directory jxpath in the <tt>jakarta-commons</tt> CVS
repository. There is a requirement to setup an additional committer: Dmitri
Plotnikov.</li>

<li>
Mailing List - Discussions will take place on the general <i>jakarta-commons@jakarta.apache.org</i>
mailing list. To help list subscribers identify messages of interest, it
is suggested that the message subject of messages about this component
be prefixed with [JXPath].</li>

<li>
Bugzilla - New component "JXPath" under the "Commons" product category,
with appropriate version identifiers as needed.</li>

<li>
Jyve FAQ - New category "commons-jxpath" (when available).</li>
</ul>

<h3>
(4) Initial Committers</h3>
The initial committers on the JXPath component shall be Dmitri Plotnikov and Craig McClanahan.
</body>
</html>