Hi,

Attached is my (untested) API upgrade patch against the PHPCR interfaces. There are some interface renames and removals, so in addition to applying the patch you need to remove the following files:

    Only in phpcr-0.1.orig/php170: BaseValue.php
    Only in phpcr-0.1.orig/php170: BinaryValue.php
    Only in phpcr-0.1.orig/php170: BooleanValue.php
    Only in phpcr-0.1.orig/php170: DateValue.php
    Only in phpcr-0.1.orig/php170: DoubleValue.php
    Only in phpcr-0.1.orig/php170: LongValue.php
    Only in phpcr-0.1.orig/php170/nodetype: ItemDef.php
    Only in phpcr-0.1.orig/php170/nodetype: NodeDef.php
    Only in phpcr-0.1.orig/php170/nodetype: PropertyDef.php
    Only in phpcr-0.1.orig/php170: PathValue.php
    Only in phpcr-0.1.orig/php170: ReferenceValue.php
    Only in phpcr-0.1.orig/php170: StringValue.php

My changes reflect most of the latest changes in the JCR spec, and contain _exact_ copies of the JCR javadocs. Even if the JCR spec license is compatible with the Apache License, I suppose we cannot just slap the AL on top of the PHP API. And given that, would there then be a problem in including the non-Apache licensed API in the Jackrabbit SVN repository?

Based on previous comments I am sure that we can work the licensing issue out, but I wouldn't want to go committing anything before there is a consensus on how to manage the licensing.

As the PHP port is a quite straightforward mapping from the Java API, it might in the extreme case be possible to use a semiautomated Java to PHP API conversion script instead of the full port.

BR,

Jukka Zitting
Only in phpcr-0.1.orig/php170: BaseValue.php
Only in phpcr-0.1.orig/php170: BinaryValue.php
Only in phpcr-0.1.orig/php170: BooleanValue.php
Only in phpcr-0.1.orig/php170: DateValue.php
Only in phpcr-0.1.orig/php170: DoubleValue.php
diff -r -u -P phpcr-0.1.orig/php170/lock/Lock.php phpcr-0.1/php170/lock/Lock.php
--- phpcr-0.1.orig/php170/lock/Lock.php 2005-05-15 23:26:28.000000000 +0300
+++ phpcr-0.1/php170/lock/Lock.php      2005-06-16 12:08:31.000000000 +0300
@@ -95,6 +95,14 @@
     public function isLive();
 
     /**
+     * Returns <code>true</code> if this is a session-scoped lock. Returns
+     * <code>false</code> if this is an open-scoped lock.
+     *
+     * @return a <code>boolean</code>
+     */
+    public function isSessionScoped();
+
+    /**
      * Refreshes (brings back to life) a previously unlocked <code>Lock</code> 
object
      * (one for which <code>isLive</code> returns <code>false</code>). If this 
lock
      * is still live (<code>isLive</code> returns <code>true</code>) or if 
this <code>Session</code>
Only in phpcr-0.1.orig/php170: LongValue.php
diff -r -u -P phpcr-0.1.orig/php170/Node.php phpcr-0.1/php170/Node.php
--- phpcr-0.1.orig/php170/Node.php      2005-05-16 00:29:59.000000000 +0300
+++ phpcr-0.1/php170/Node.php   2005-06-16 12:08:31.000000000 +0300
@@ -27,7 +27,7 @@
 require_once 'php170/AccessDeniedException.php';
 require_once 'php170/nodetype/ConstraintViolationException.php';
 require_once 'php170/nodetype/NoSuchNodeTypeException.php';
-require_once 'php170/nodetype/NodeDef.php';
+require_once 'php170/nodetype/NodeDefinition.php';
 require_once 'php170/nodetype/NodeType.php';
 require_once 'php170/version/OnParentVersionAction.php';
 require_once 'php170/version/Version.php';
@@ -81,8 +81,8 @@
      * <p/>
      * Since this signature does not allow explicit node type assignment, the
      * new node's node types (primary and mixin, if applicable) will be
-     * determined immediately (not on save) by the <code>NodeDef</code>s
-     * in the node types of its parent. If there is no <code>NodeDef</code>
+     * determined immediately (not on save) by the <code>NodeDefinition</code>s
+     * in the node types of its parent. If there is no 
<code>NodeDefinition</code>
      * corresponding to the name specified for this new node, then a
      * <code>ConstraintViolationException</code> is thrown immediately (not on
      * <code>save</code>).
@@ -93,7 +93,7 @@
      * @throws ItemExistsException If an item at the specified path already 
exists.
      * @throws PathNotFoundException If the specified path implies intermediary
      * nodes that do not exist.
-     * @throws ConstraintViolationException if If there is no NodeDef
+     * @throws ConstraintViolationException if If there is no NodeDefinition
      * corresponding to the name specified for this new node in the parent
      * node's node type, or if an attempt is made to add a node as a child of a
      * property.
@@ -217,6 +217,9 @@
      * @return The updated <code>Property</code> object
      * @throws ValueFormatException if <code>value</code> is incompatible with
      * (i.e. can not be converted to) the type of the specified property.
+     * @throws ConstraintViolationException  if the change would violate
+     * a node-type or other constraint and this implementation performs
+     * this validation immediately instead of waiting until save.
      * @throws RepositoryException  If another error occurs.
      */
     public function setProperty( $name, $val, $type = null );
@@ -444,7 +447,7 @@
      * Adds the specified mixin node type to this node. If a conflict with
      * another assigned mixin or the main node type results, then an exception
      * is thrown on save. Adding a mixin node type to a node immediately adds
-     * the name of that type to the list held in that node?s
+     * the name of that type to the list held in that node�s
      * <code>jcr:mixinTypes</code> property.
      *
      * @param mixinName
@@ -494,7 +497,7 @@
      * </li>
      * <li>
      * The addition is prevented because this node is protected
-     * (as defined in this node's NodeDef, found in this node's parent's node 
type).
+     * (as defined in this node's NodeDefinition, found in this node's 
parent's node type).
      * </li>
      * <li>
      * The addition is prevented due to access control restrictions.
@@ -520,8 +523,8 @@
      * (and its supertypes) for the child node definition applicable to this
      * node.
      *
-     * @return a <code>NodeDef</code> object.
-     * @see NodeType#getChildNodeDefs
+     * @return a <code>NodeDefinition</code> object.
+     * @see NodeType#getChildNodeDefinitions
      */
     public function getDefinition();
 
@@ -563,20 +566,47 @@
     public function update( $srcWorkspaceName, $shallow );
 
     /**
-     * Performs the same function as update (above) with one restriction:
-     * merge only succeeds if the base version of the corresponding node in
-     * <code>srcWorkspace</code> is a successor (or a successor of a 
successor, etc., to
-     * any degree of separation) of the base version of this node. Otherwise,
-     * the operation throws a <code>MergeException</code>. In repositories that
-     * do not support versioning, <code>merge</code> throws an
-     * <code>UnsupportedRepositoryOperationException</code>. If the current
-     * ticket does not have sufficient rights to perform the 
<code>merge</code> or the
-     * specified workspace does not exist, a 
<code>NoSuchWorkspaceException</code> is thrown.
-     * If the <code>merge</code> succeeds, the changes made to this node are
-     * persisted immediately, there is no need to call <code>save</code>.
+     * This method can be thought of as a version-sensitive update
+     * (see 7.1.7 Updating and Cloning Nodes across Workspaces in the
+     * specification).
+     *
+     * It recursively tests each versionable node in the subtree of this
+     * node against its corresponding node in srcWorkspace with respect to
+     * the relation between their respective base versions and either updates
+     * the node in question or not, depending on the outcome of the test.
+     * For details see 8.2.10 Merge in the specification. A MergeException
+     * is thrown if bestEffort is false and a versionable node is encountered
+     * whose corresponding node's base version is on a divergent branch from
+     * this node's base version.
+     *
+     * If successful, the changes are persisted immediately, there is no need
+     * to call save.
+     *
+     * This method returns a NodeIterator over all versionable nodes in the
+     * subtree that received a merge result of fail.
+     *
+     * If bestEffort is false, this iterator will be empty (since if it merge
+     * returns successfully, instead of throwing an exception, it will be
+     * because no failures were encountered).
+     *
+     * If bestEffort is true, this iterator will contain all nodes that
+     * received a fail during the course of this merge operation.
+     *
+     * If the specified srcWorkspace does not exist, a NoSuchWorkspaceException
+     * is thrown.
+     *
+     * If the current session does not have sufficient permissions to perform
+     * the operation, then an AccessDeniedException is thrown.
+     *
+     * An InvalidItemStateException is thrown if this session (not necessarily
+     * this node) has pending unsaved changes.
+     *
+     * A LockException is thrown if a lock prevents the merge. 
      *
      * @param srcWorkspace the name of the source workspace.
      * @param shallow a boolean
+     * @return iterator over all nodes that received a merge result of "fail"
+     * in the course of this operation.
      * @throws UnsupportedRepositoryOperationException if versioning is not 
supported.
      * @throws MergeException succeeds if the base version of the corresponding
      * node in srcWorkspace is not a successor of the base version of this 
node.
diff -r -u -P phpcr-0.1.orig/php170/nodetype/ItemDefinition.php 
phpcr-0.1/php170/nodetype/ItemDefinition.php
--- phpcr-0.1.orig/php170/nodetype/ItemDefinition.php   1970-01-01 
02:00:00.000000000 +0200
+++ phpcr-0.1/php170/nodetype/ItemDefinition.php        2005-06-16 
12:08:31.000000000 +0300
@@ -0,0 +1,111 @@
+<?php
+
+/*
++----------------------------------------------------------------------+
+| Copyright (c) 2005 Mayflower GmbH                                    |
++----------------------------------------------------------------------+
+| This library is free software; you can redistribute it and/or        |
+| modify it under the terms of the GNU Lesser General Public           |
+| License as published by the Free Software Foundation; either         |
+| version 2 of the License, or (at your option) any later version.     |
+|                                                                      |
+| This library is distributed in the hope that it will be useful,      |
+| but WITHOUT ANY WARRANTY; without even the implied warranty of       |
+| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU    |
+| Lesser General Public License for more details.                      |
+|                                                                      |
+| You should have received a copy of the GNU Lesser General Public     |
+| License along with this library; if not, write to the                |
+| Free Software Foundation, Inc., 59 Temple Place - Suite 330,         |
+| Boston, MA 02111-1307, USA.                                          |
++----------------------------------------------------------------------+
+| Author: Markus Nix <[EMAIL PROTECTED]>                               |
++----------------------------------------------------------------------+
+*/
+
+
+/**
+ * An item definition.
+ *
+ * @author Markus Nix <[EMAIL PROTECTED]>
+ * @copyright (c) 2005 Mayflower GmbH
+ * @version $Id$
+ */
+interface ItemDefinition
+{
+    /**
+     * Gets the node type that contains the declaration of <i>this</i>
+     * <code>ItemDefinition</code>.
+     *
+     * @return a <code>NodeType</code> object.
+     */
+    public function getDeclaringNodeType();
+
+    /**
+     * Gets the name of the child item. If <code>"*"</code>, this
+     * <code>ItemDefinition</code> defines a residual set of child items. That 
is,
+     * it defines the characteristics of all those child items with names apart
+     * from the names explicitly used in other child item definitions.
+     *
+     * @return a <code>String</code> denoting the name or <code>"*"</code>.
+     */
+    public function getName();
+
+    /**
+     * Reports whether the item is to be automatically created when its parent 
node is created.
+     * If <code>true</code>, then this <code>ItemDefinition</code> will 
necessarily not be a residual
+     * set definition but will specify an actual item name (in other words 
getName() will not
+     * return �*�).
+     *
+     * @return a <code>boolean</code>.
+     */
+    public function isAutoCreate();
+
+    /**
+     * Reports whether the item is mandatory. A mandatory child node is one 
that,
+     * if its parent node exists, must also exist. A mandatory property is one 
that
+     * must have a value. In the case of single-value properties this means 
that it
+     * must exist (since there is no such thing a null value). In the case of
+     * multi-value properties this means that the property must exist and must 
have
+     * at least one value (it cannot hold an empty array).
+     * <p/>
+     * A mandatory item cannot be removed, short of removing its parent.
+     * Nor can it be set to the empty array (if it is a multi-value property).
+     * <p/>
+     * An attempt to save a node that has a mandatory child item without first
+     * creating that child item and, if it is a property, giving it a value,
+     * will throw a <code>ConstraintViolationException</code> on 
<code>save</code>.
+     *
+     * @return a <code>boolean</code>
+     */
+    public function isMandatory();
+
+    /**
+     * Gets the on-parent-version status of the child item. This governs what 
to do if
+     * the parent node of this child item is versioned.
+     *
+     * @return an <code>int</code>.
+     */
+    public function getOnParentVersion();
+
+    /**
+     * Reports whether the child item is protected. In level 2 
implementations, a protected item is one that cannot be removed
+     * (except by removing its parent) or modified through the the standard 
write methods of this API (that is, Item.remove,
+     * Node.addNode, Node.setProperty and Property.setValue).
+     * <p/>
+     * A protected node may be removed or modified (in a level 2 
implementation), however, through some
+     * mechanism not defined by this specification or as a side-effect of 
operations other than
+     * the standard write methods of the API. For example, in those 
repositories that support versioning, the
+     * <code>Node.checkin</code> method has the side-effect of changing a 
node's <code>jcr:isCheckedOut</code>
+     * property, even though that property is protected.
+     * <p/>
+     * Note that when a node is protected this means that all its
+     * properties are also protected (regardless of their protected setting). 
The protected status of a property
+     * only becomes relevant if its parent node is not protected.
+     *
+     * @return a <code>boolean</code>.
+     */
+    public function isProtected();
+}
+
+?>
\ No newline at end of file
Only in phpcr-0.1.orig/php170/nodetype: ItemDef.php
diff -r -u -P phpcr-0.1.orig/php170/nodetype/NodeDefinition.php 
phpcr-0.1/php170/nodetype/NodeDefinition.php
--- phpcr-0.1.orig/php170/nodetype/NodeDefinition.php   1970-01-01 
02:00:00.000000000 +0200
+++ phpcr-0.1/php170/nodetype/NodeDefinition.php        2005-06-16 
12:08:31.000000000 +0300
@@ -0,0 +1,78 @@
+<?php
+
+/*
++----------------------------------------------------------------------+
+| Copyright (c) 2005 Mayflower GmbH                                    |
++----------------------------------------------------------------------+
+| This library is free software; you can redistribute it and/or        |
+| modify it under the terms of the GNU Lesser General Public           |
+| License as published by the Free Software Foundation; either         |
+| version 2 of the License, or (at your option) any later version.     |
+|                                                                      |
+| This library is distributed in the hope that it will be useful,      |
+| but WITHOUT ANY WARRANTY; without even the implied warranty of       |
+| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU    |
+| Lesser General Public License for more details.                      |
+|                                                                      |
+| You should have received a copy of the GNU Lesser General Public     |
+| License along with this library; if not, write to the                |
+| Free Software Foundation, Inc., 59 Temple Place - Suite 330,         |
+| Boston, MA 02111-1307, USA.                                          |
++----------------------------------------------------------------------+
+| Author: Markus Nix <[EMAIL PROTECTED]>                               |
++----------------------------------------------------------------------+
+*/
+
+
+require_once 'php170/nodetype/ItemDefinition.php';
+
+
+/**
+ * A node definition. Used in node typed definition
+ *
+ * @author Markus Nix <[EMAIL PROTECTED]>
+ * @copyright (c) 2005 Mayflower GmbH
+ * @version $Id$
+ */
+interface NodeDefinition extends ItemDefinition
+{
+    /**
+     * Gets the minimum set of primary node types that the child node must 
have.
+     * Returns an array to support those implementations with multiple
+     * inheritance. The simplest case would be to return <code>nt:base</code>,
+     * which is the base of all primary node types and therefore, in this
+     * context, represents the least restrictive requirement.
+     * <p>
+     * A node must still have only one assigned primary node type, though
+     * this attribute can restrict that node type by taking advantage of any
+     * inheritance hierarchy that the implementation may support.
+     *
+     * @return an array of <code>NodeType</code> objects.
+     */
+    public function getRequiredPrimaryTypes();
+
+    /**
+     * Gets the default primary node type that will be assigned to the child
+     * node if it is created without an explicitly specified primary node type.
+     * This node type must be a subtype of (or the same type as) the node types
+     * returned by <code>getRequiredPrimaryTypes</code>.
+     * <p/>
+     * If <code>null</code> is returned this indicates that no default primary
+     * type is specified and that therefore an attempt to create this node 
without
+     * specifying a node type will throw a 
<code>ConstraintViolationException</code>.
+     *
+     * @return a <code>NodeType</code>.
+     */
+    public function getDefaultPrimaryType();
+
+    /**
+     * Reports whether this child node can have same-name siblings. In other
+     * words, whether the parent node can have more than one child node of this
+     * name.
+     *
+     * @return a boolean.
+     */
+    public function allowSameNameSibs();
+}
+
+?>
\ No newline at end of file
Only in phpcr-0.1.orig/php170/nodetype: NodeDef.php
diff -r -u -P phpcr-0.1.orig/php170/nodetype/NodeType.php 
phpcr-0.1/php170/nodetype/NodeType.php
--- phpcr-0.1.orig/php170/nodetype/NodeType.php 2005-05-16 00:16:04.000000000 
+0300
+++ phpcr-0.1/php170/nodetype/NodeType.php      2005-06-16 12:08:31.000000000 
+0300
@@ -25,8 +25,8 @@
 
 
 require_once 'php170/Value.php';
-require_once 'php170/nodetype/PropertyDef.php';
-require_once 'php170/nodetype/NodeDef.php';
+require_once 'php170/nodetype/PropertyDefinition.php';
+require_once 'php170/nodetype/NodeDefinition.php';
 require_once 'php170/nodetype/NodeType.php';
 
 
diff -r -u -P phpcr-0.1.orig/php170/nodetype/PropertyDefinition.php 
phpcr-0.1/php170/nodetype/PropertyDefinition.php
--- phpcr-0.1.orig/php170/nodetype/PropertyDefinition.php       1970-01-01 
02:00:00.000000000 +0200
+++ phpcr-0.1/php170/nodetype/PropertyDefinition.php    2005-06-16 
12:08:31.000000000 +0300
@@ -0,0 +1,248 @@
+<?php
+
+/*
++----------------------------------------------------------------------+
+| Copyright (c) 2005 Mayflower GmbH                                    |
++----------------------------------------------------------------------+
+| This library is free software; you can redistribute it and/or        |
+| modify it under the terms of the GNU Lesser General Public           |
+| License as published by the Free Software Foundation; either         |
+| version 2 of the License, or (at your option) any later version.     |
+|                                                                      |
+| This library is distributed in the hope that it will be useful,      |
+| but WITHOUT ANY WARRANTY; without even the implied warranty of       |
+| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU    |
+| Lesser General Public License for more details.                      |
+|                                                                      |
+| You should have received a copy of the GNU Lesser General Public     |
+| License along with this library; if not, write to the                |
+| Free Software Foundation, Inc., 59 Temple Place - Suite 330,         |
+| Boston, MA 02111-1307, USA.                                          |
++----------------------------------------------------------------------+
+| Author: Markus Nix <[EMAIL PROTECTED]>                               |
++----------------------------------------------------------------------+
+*/
+
+
+require_once 'php170/Value.php';
+require_once 'php170/nodetype/ItemDefinition.php';
+
+
+/**
+ * A property definition. Used in node type definitions.
+ *
+ * @author Markus Nix <[EMAIL PROTECTED]>
+ * @copyright (c) 2005 Mayflower GmbH
+ * @version $Id$
+ */
+interface PropertyDefinition extends ItemDefinition
+{
+    /**
+     * Gets the required type of the property. One of:
+     * <ul>
+     *   <li><code>PropertyType::STRING</code></li>
+     *   <li><code>PropertyType::DATE</code></li>
+     *   <li><code>PropertyType::BINARY</code></li>
+     *   <li><code>PropertyType::DOUBLE</code></li>
+     *   <li><code>PropertyType::LONG</code></li>
+     *   <li><code>PropertyType::BOOLEAN</code></li>
+     *   <li><code>PropertyType::NAME</code></li>
+     *   <li><code>PropertyType::PATH</code></li>
+     *   <li><code>PropertyType::REFERENCE</code></li>
+     *   <li><code>PropertyType::UNDEFINED</code></li>
+     * </ul>
+     * <code>PropertyType.UNDEFINED</code> is returned if this property may be
+     * of any type.
+     *
+     * @return an int
+     */
+    public function getRequiredType();
+
+    /**
+     * Gets the array of constraint strings. Each string in the array specifies
+     * a constraint on the value of the property. The constraints are OR-ed 
together,
+     * meaning that in order to be valid, the value must meet at least one of 
the
+     * constraints. For example, a constraint array of <code>["constraint1", 
"constraint2",
+     * "constraint3"]</code> has the interpretation: "the value of this 
property must
+     * meet either constraint1, constraint2 or constraint3".
+     * <p>
+     * Reporting of value constraints is optional. An implementation may return
+     * <code>null</code>, indicating that value constraint information is 
unavailable
+     * (though a constraint may still exist).
+     * <p/>
+     * Returning an empty array, on the other hand, indicates that value 
constraint information
+     * is available and that no constraints are placed on this value.
+     * <p>
+     * In the case of multi-value properties, the constraint string array
+     * returned applies to all the values of the property.
+     * <p>
+     * The constraint strings themselves having differing formats and 
interpretations
+     * depending on the type of the property in question. The following 
describes the
+     * value constraint syntax for each property type:
+     * <ul>
+     * <li>
+     * <code>STRING</code>: The constraint string is a regular expression 
pattern. For example the
+     * regular expression "<code>.*</code>" means "any string, including the 
empty string". Whereas
+     * a simple literal string (without any RE-specific meta-characters) like 
"<code>banana</code>"
+     * matches only the string "<code>banana</code>".
+     * </li>
+     * <li>
+     * <code>PATH</code>: The constraint string is a <i>JCR path</i> with an 
optional "<code>*</code>" character after
+     * the last "<code>/</code>" character. For example,  possible constraint 
strings for a property
+     * of type <code>PATH</code> include:
+     * <ol>
+     * <li>
+     * "<code>/myapp:products/myapp:televisions</code>"
+     * </li>
+     * <li>
+     * "<code>/myapp:products/myapp:televisions/</code>"
+     * </li>
+     * <li>
+     * "<code>/myapp:products/*</code>"
+     * </li>
+     * <li>
+     * "<code>myapp:products/myapp:televisions</code>"
+     * </li>
+     * <li>
+     * "<code>../myapp:televisions</code>"
+     * </li>
+     * <li>
+     * "<code>../myapp:televisions/*</code>"
+     * </li>
+     * </ol>
+     * The following principles apply:
+     * <ul>
+     * <li>
+     * The "*" means "matches descendants" not "matches any subsequent path". 
For example,
+     * <code>/a/*</code> does not match <code>/a/../c</code>.
+     * The constraint must match the normalized path.
+     * </li>
+     * <li>
+     * Relative path constraint only match relative path values and absolute 
path
+     * constraints only match absolute path values.
+     * </li>
+     * <li>
+     * A trailing "<code>/</code>" has no effect (hence, <code>1</code> and 
<code>2</code>, above, are equivalent).
+     * </li>
+     * <li>
+     * The trailing "<code>*</code>" character means that the value of the 
<code>PATH</code> property is
+     * restricted to the indicated subtree (in other words any additional 
relative path
+     * can replace the "<code>*</code>"). For example, 3, above would allow
+     * <code>/myapp:products/myapp:radios</code>, 
<code>/myapp:products/myapp:microwaves/X900</code>, and so
+     * forth.
+     * </li>
+     * <li>
+     * A constraint without a "<code>*</code>" means that the 
<code>PATH</code> property is restricted to that
+     * precise path. For example, <code>1</code>, above, would allow only the 
value
+     * <code>/myapp:products/myapp:televisions</code>.
+     * </li>
+     * <li>
+     * The constraint can indicate either a relative path or an absolute path
+     * depending on whether it includes a leading "<code>/</code>" character. 
<code>1</code> and <code>4</code>, above for
+     * example, are distinct.
+     * </li>
+     * <li>
+     * The string returned must reflect the namespace mapping in the current 
<code>Session</code>
+     * (i.e., the current state of the namespace registry overlaid with any
+     * session-specific mappings). Constraint strings for <code>PATH</code> 
properties should be
+     * stored in fully-qualified form (using the actual URI instead of the 
prefix) and
+     * then be converted to prefix form according to the current mapping upon 
the
+     * <code>PropertyDefinition.getValueConstraints</code> call.
+     * </li>
+     * </ul>
+     * </li>
+     * <li>
+     * <code>NAME</code>: The constraint string is a <i>JCR name</i> in prefix 
form. For example
+     * "<code>myapp:products</code>". No wildcards or other pattern matching 
are supported. As with
+     * <code>PATH</code> properties, the string returned must reflect the 
namespace mapping in the
+     * current <code>Session</code>. Constraint strings for <code>NAME</code> 
properties should be stored in
+     * fully-qualified form (using the actual URI instead of the prefix) and 
then be
+     * converted to prefix form according to the current mapping.
+     * </li>
+     * <li>
+     * <code>REFERENCE</code>: The constraint string is a <i>JCR name</i> in 
prefix form. This name is
+     * interpreted as a node type name and the <code>REFERENCE</code> property 
is restricted to
+     * referring only to nodes that have at least the indicated node type. For
+     * example, a constraint of "<code>mytype:document</code>" would indicate 
that the REFERENCE
+     * property in question can only refer to nodes that have at least the 
node type
+     * <code>mytype:document</code> (assuming this was the only constraint 
returned in the array,
+     * recall that the array of constraints are to be "OR-ed" together). No 
wildcards or other
+     * pattern matching are supported. As with <code>PATH</code> properties, 
the string returned
+     * must reflect the namespace mapping in the current <code>Session</code>. 
Constraint strings
+     * for <code>REFERENCE</code> properties should be stored in 
fully-qualified form (using the
+     * actual URI instead of the prefix) and then be converted to prefix form 
according to the
+     * current mapping.
+     * </li>
+     * <li>
+     * <code>BOOLEAN</code>: Either "<code>true</code>" or 
"<code>false</code>".
+     * </li>
+     * </ul>
+     * The remaining types all have value constraints in the form of inclusive 
or
+     * exclusive ranges: i.e., "<code>[min, max]</code>", "<code>(min, 
max)</code>",
+     * "<code>(min, max]</code>" or "<code>[min, max)</code>". Where 
"<code>[</code>"
+     * and "<code>]</code>" indicate "inclusive", while "<code>(</code>" and 
"<code>)</code>"
+     * indicate "exclusive". A missing <code>min</code> or <code>max</code> 
value
+     * indicates no bound in that direction. For example [,5] means no minimum 
but a
+     * maximum of 5 (inclusive) while [,] means simply that any value will 
suffice,
+     * The meaning of the <code>min</code> and <code>max</code> values 
themselves
+     * differ between types as follows:
+     * <ul>
+     * <li>
+     * <code>BINARY</code>: <code>min</code> and <code>max</code> specify the 
allowed
+     * size range of the binary value in bytes.
+     * </li>
+     * <li>
+     * <code>DATE</code>: <code>min</code> and <code>max</code> are dates 
specifying the
+     * allowed date range. The date strings must be in the ISO8601-compliant 
format:
+     * <code>YYYY-MM-DDThh:mm:ss.sssTZD</code>.
+     * </li>
+     * <li>
+     * <code>LONG</code>, <code>DOUBLE</code>: min and max are numbers.
+     * </li>
+     * </ul>
+     * Because constraints are returned as an array of disjunctive constraints,
+     * in many cases the elements of the array can serve directly as a "choice 
list".
+     * This may, for example, be used by an application to display options to 
the
+     * end user indicating the set of permitted values.
+     *
+     * @return a <code>String</code> array.
+     */
+    public function getValueConstraints();
+
+    /**
+     * Gets the default value(s) of the property. These are the values
+     * that the property defined by this PropertyDefinition will be assigned 
if it
+     * is automatically created (that is, if [EMAIL PROTECTED] #isAutoCreate()}
+     * returns <code>true</code>).
+     * <p>
+     * This method returns an array of Value objects. If the property is
+     * multi-valued, then this array represents the full set of values
+     * that the property will be assigned upon being auto-created.
+     * Note that this could be the empty array. If the property is 
single-valued,
+     * then the array returned will be of size 1.
+     * <p/>
+     * If <code>null</code> is returned, then the property has no fixed 
default value.
+     * This does not exclude the possibility that the property still assumes 
some
+     * value automatically, but that value may be parameterized (for example,
+     * "the current date") and hence not expressable as a single fixed value.
+     * In particular, this <i>must</i> be the case if <code>isAutoCreate</code>
+     * returns <code>true</code> and this method returns <code>null</code>.
+     *
+     * @return an array of <code>Value</code> objects.
+     */
+    public function getDefaultValues();
+
+    /**
+     * Reports whether this property can have multiple values. Note that the
+     * <code>isMultiple</code> flag is special in that a given node type may
+     * have two property definitions that are identical in every respect except
+     * for the their <code>isMultiple</code> status. For example, a node type
+     * can specify two string properties both called <code>X</code>, one of
+     * which is multi-valued and the other not.
+     *
+     * @return a <code>boolean</code>
+     */
+    public function isMultiple();
+}
+
+?>
\ No newline at end of file
Only in phpcr-0.1.orig/php170/nodetype: PropertyDef.php
Only in phpcr-0.1.orig/php170: PathValue.php
diff -r -u -P phpcr-0.1.orig/php170/Property.php phpcr-0.1/php170/Property.php
--- phpcr-0.1.orig/php170/Property.php  2005-05-16 00:23:53.000000000 +0300
+++ phpcr-0.1/php170/Property.php       2005-06-16 12:08:31.000000000 +0300
@@ -28,7 +28,7 @@
 require_once 'php170/Node.php';
 require_once 'php170/RepositoryException.php';
 require_once 'php170/ValueFormatException.php';
-require_once 'php170/nodetype/PropertyDef.php';
+require_once 'php170/nodetype/PropertyDefinition.php';
 require_once 'php170/version/VersionException.php';
 require_once 'php170/lock/LockException.php';
 require_once 'php170/nodetype/ConstraintViolationException.php';
@@ -246,7 +246,7 @@
      * is a <code>PropertyType.BINARY</code>, otherwise it returns the number
      * of characters needed to display the value (for strings this is the 
string
      * length, for numeric types it is the number of characters needed to
-     * display the number). Returns ?1 if the implementation cannot determine
+     * display the number). Returns �1 if the implementation cannot determine
      * the length.
      *
      * If this property is multi-valued, this method throws a 
<code>ValueFormatException</code>.
@@ -264,7 +264,7 @@
      * numeric types it is the number of characters needed to display the 
number). The order of the
      * length values corresponds to the order of the values in the property.
      * <p/>
-     * Returns a <code>?1</code> in the appropriate position if the 
implementation cannot determine
+     * Returns a <code>�1</code> in the appropriate position if the 
implementation cannot determine
      * the length of a value.
      * <p/>
      * If this property is single-valued, this method throws a 
<code>ValueFormatException</code>.
@@ -284,9 +284,9 @@
      * creation from among others which may have been applicable is an 
implemention issue and is not
      * covered by this specification.
      *
-     * @see NodeType#getPropertyDefs
+     * @see NodeType#getPropertyDefinitions
      * @throws RepositoryException if an error occurs.
-     * @return a <code>PropertyDef</code> object.
+     * @return a <code>PropertyDefinition</code> object.
      */
     public function getDefinition();
 
diff -r -u -P phpcr-0.1.orig/php170/query/QueryManager.php 
phpcr-0.1/php170/query/QueryManager.php
--- phpcr-0.1.orig/php170/query/QueryManager.php        2005-05-15 
23:26:28.000000000 +0300
+++ phpcr-0.1/php170/query/QueryManager.php     2005-06-16 12:08:31.000000000 
+0300
@@ -77,6 +77,7 @@
      * See QueryLanguage.
      *
      * @return An string array.
+     * @throws RepositoryException if an error occurs.
      */
     public function getSupportedQueryLanguages();
 }
diff -r -u -P phpcr-0.1.orig/php170/query/Query.php 
phpcr-0.1/php170/query/Query.php
--- phpcr-0.1.orig/php170/query/Query.php       2005-05-15 23:26:28.000000000 
+0300
+++ phpcr-0.1/php170/query/Query.php    2005-06-16 12:08:31.000000000 +0300
@@ -90,26 +90,74 @@
     public function getLanguage();
 
     /**
-     * If this is a persistent query (i.e., it has been saved), returns the 
path of the
-     * node that persists it. If this query has not been saved, it returns 
null.
+     * If this is a Query object that has been stored using
+     * <code>storeAsNode($string)</code> (regardless of whether it has
+     * been saved yet) or retrieved using
+     * <code>QueryManager.getQuery($node)</code>), then this method returns
+     * the path of the <code>nt:query</code> node that stores the query. If
+     * this is a transient query (that is, a <code>Query</code> object created
+     * with <code>QueryManager.createQuery($string, $string)</code> but not
+     * yet stored) then this method throws an ItemNotFoundException.
      *
      * @return path of persisted node representing this query in content.
      */
-    public function getPersistentQueryPath();
+    public function getStoredQueryPath();
 
     /**
-     * Creates a persistent query. The persisted query will be created as a
-     * node of node type <code>nt:query</code>. This method persists the new 
node
-     * immediately; there is no need to call <code>Node.save</code>.
+     * Creates a node representing this Query in content.
+     *
+     * In a level 1 repository this method throws an
+     * UnsupportedRepositoryOperationException.
+     *
+     * In a level 2 repository it creates a node of type nt:query at absPath
+     * and returns that node.
+     *
+     * In order to persist the newly created node, a save must be performed
+     * that includes the parent of this new node within its scope. In other
+     * words, either a Session.save or an Item.save on the parent or
+     * higher-degree ancestor of absPath must be performed.
+     *
+     * An ItemExistsException will be thrown either immediately (by this
+     * method), or on save, if an item at the specified path already exists
+     * and same-name siblings are not allowed. Implementations may differ
+     * on when this validation is performed.
+     *
+     * A PathNotFoundException will be thrown either immediately , or on
+     * save, if the specified path implies intermediary nodes that do not
+     * exist. Implementations may differ on when this validation is performed.
+     *
+     * A ConstraintViolationExceptionwill be thrown either immediately or
+     * on save, if adding the node would violate a node type or
+     * implementation-specific constraintor if an attempt is made to add
+     * a node as the child of a property. Implementations may differ on when
+     * this validation is performed.
+     *
+     * A VersionException will be thrown either immediately (by this method),
+     * or on save, if the node to which the new child is being added is
+     * versionable and checked-in or is non-versionable but its nearest
+     * versionable ancestor is checked-in. Implementations may differ on when
+     * this validation is performed.
+     *
+     * A LockException will be thrown either immediately (by this method), or
+     * on save, if a lock prevents the addition of the node. Implementations
+     * may differ on when this validation is performed.
      *
      * @param absPath path at which to persist this query.
+     * @return the newly created node.
      * @throws ItemExistsException If an item already exists at the indicated 
position
      * @throws PathNotFoundException If the path cannot be found
      * @throws ConstraintViolationException If creating the node would violate 
a
      * node type (or other implementation specific) constraint.
+     * @throws VersionException f the node to which the new child is being
+     * added is versionable and checked-in or is non-versionable but its
+     * nearest versionable ancestor is checked-in and this implementation
+     * performs this validation immediately instead of waiting until save.
+     * @throws LockException if a lock prevents the addition of the node and
+     * this implementation performs this validation immediately instead of
+     * waiting until save.
      * @throws RepositoryException If another error occurs.
      */
-    public function save( $absPath );
+    public function storeAsNode( $absPath );
 }
 
 ?>
\ No newline at end of file
diff -r -u -P phpcr-0.1.orig/php170/query/QueryResult.php 
phpcr-0.1/php170/query/QueryResult.php
--- phpcr-0.1.orig/php170/query/QueryResult.php 2005-05-15 23:26:28.000000000 
+0300
+++ phpcr-0.1/php170/query/QueryResult.php      2005-06-16 12:08:31.000000000 
+0300
@@ -42,10 +42,10 @@
     /**
      * Returns an array of all the property names (column names) in this 
result set.
      *
-     * @return a <code>PropertyIterator</code>
+     * @return array of strings
      * @throws RepositoryException if an error occurs.
      */
-    public function getPropertyNames();
+    public function getColumnNames();
 
     /**
      * Returns an iterator over the <code>Row</code>s of the query result 
table.
Only in phpcr-0.1.orig/php170: ReferenceValue.php
diff -r -u -P phpcr-0.1.orig/php170/Session.php phpcr-0.1/php170/Session.php
--- phpcr-0.1.orig/php170/Session.php   2005-05-16 00:16:37.000000000 +0300
+++ phpcr-0.1/php170/Session.php        2005-06-16 12:08:31.000000000 +0300
@@ -82,7 +82,7 @@
      *
      * @return the user id from the credentials used to acquire this session.
      */
-    public function getUserId();
+    public function getUserID();
 
     /**
      * Returns the value of the named attribute as an <code>Object</code>, or 
<code>null</code> if no attribute of the
@@ -105,6 +105,30 @@
     public function getAttributeNames();
 
     /**
+     * Returns true if this Session object is usable by the client. Otherwise,
+     * returns false. A usable Session is one that is neither logged-out,
+     * timed-out nor in any other way disconnected from the repository.
+     *
+     * @return true if this Session is usable, false otherwise.
+     */
+    public function isLive();
+
+    /**
+     * This method returns a ValueFactory that is used to create Value
+     * objects for use in setting of repository properties.
+     *
+     * If writing to the repository is not supported (because this is
+     * a level 1-only implementation, for example) an
+     * UnsupportedRepositoryOperationException will be thrown.
+     *
+     * @return a <code>[EMAIL PROTECTED] ValueFactory}</code> object
+     * @throws UnsupportedRepositoryOperationException if writing to the
+     * repository is not supported.
+     * @throws RepositoryException if another error occurs
+     */
+    public function getValueFactory();
+
+    /**
      * Returns the <code>Workspace</code> attached to this 
<code>Session</code>.
      *
      * @return a <code>[EMAIL PROTECTED] Workspace}</code> object.
@@ -173,6 +197,7 @@
      *
      * @param absPath an absolute path
      * @return <code>true</code> if an item exists at <code>absPath</code>; 
otherwise returns <code>false</code>.
+     * @throws RepositoryException if an error occurs.
      */
     public function itemExists( $absPath );
 
@@ -438,6 +463,7 @@
      * A <code>RepositoryException</code> is thrown if another error occurs.
      *
      * @param parentAbsPath the absolute path of a node under which (as child) 
the imported subtree will be built.
+     * @param mode a four-value flag that governs how incoming UUIDs are 
handled.
      *
      * @return an org.xml.sax.ContentHandler whose methods may be called to 
feed SAX events into the deserializer.
      *
@@ -450,7 +476,7 @@
      * @throws LockException if a lock prevents the addition of the subtree.
      * @throws RepositoryException if another error occurs.
      */
-    public function getImportContentHandler( $parentAbsPath );
+    public function getImportContentHandler( $parentAbsPath, $mode );
 
     /**
      * Deserializes an XML document and adds the resulting item subtree as a 
child of the node at
@@ -495,6 +521,7 @@
      *
      * @param parentAbsPath the absolute path of the node below which the 
deserialized subtree is added.
      * @param in The <code>Inputstream</code> from which the XML to be 
deserilaized is read.
+     * @param mode a four-value flag that governs how incoming UUIDs are 
handled.
      *
      * @throws IOException if an error during an I/O operation occurs.
      * @throws PathNotFoundException if no node exists at 
<code>parentAbsPath</code>.
@@ -508,7 +535,7 @@
      * @throws LockException if a lock prevents the addition of the subtree.
      * @throws RepositoryException is another error occurs.
      */
-    public function importXML( $parentAbsPath, $in );
+    public function importXML( $parentAbsPath, $in, $mode );
 
     /**
      * Serializes the node (and if <code>noRecurse</code> is 
<code>false</code>,
@@ -557,7 +584,7 @@
      * <code>org.xml.sax.ContentHandler</code>.
      * @throws RepositoryException if another error occurs.
      */
-    public function exportSysView( $absPath, $out, $skipBinary, $noRecurse );
+    public function exportSystemView( $absPath, $out, $skipBinary, $noRecurse 
);
 
     /**
      * Serializes the node (and if <code>noRecurse</code> is 
<code>false</code>,
@@ -605,7 +632,7 @@
      * <code>org.xml.sax.ContentHandler</code>.
      * @throws RepositoryException if another error occurs.
      */
-    public function exportDocView( $absPath, $out, $skipBinary, $noRecurse );
+    public function exportDocumentView( $absPath, $out, $skipBinary, 
$noRecurse );
 
     /**
      * Within the scope of this session, rename a persistently registered
Only in phpcr-0.1.orig/php170: StringValue.php
diff -r -u -P phpcr-0.1.orig/php170/ValueFactory.php 
phpcr-0.1/php170/ValueFactory.php
--- phpcr-0.1.orig/php170/ValueFactory.php      1970-01-01 02:00:00.000000000 
+0200
+++ phpcr-0.1/php170/ValueFactory.php   2005-06-16 12:08:31.000000000 +0300
@@ -0,0 +1,26 @@
+<?php
+
+require_once 'php170/Value.php';
+require_once 'php170/ValueFormatException.php';
+require_once 'php170/RepositoryException.php';
+
+/**
+ * The ValueFactory object provides methods for the creation Value
+ * objects that can then be used to set properties.
+ */
+interface ValueFactory
+{
+    /**
+     * Returns a Value object of with the specified value and an inferred
+     * type.
+     *
+     * @param the specified value
+     * @return a Value object
+     * @throws ValueFormatException if the specified value format is invalid
+     * @throws RepositoryException if a repository error occurs
+     */
+    public function createValue($value);
+
+}
+
+?>

Reply via email to