You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by jk...@apache.org on 2002/04/12 20:24:24 UTC

cvs commit: xml-xalan/java/src/org/apache/xml/dtm XSequence.java

jkesselm    02/04/12 11:24:24

  Added:       java/src/org/apache/xml/dtm XSequence.java
  Log:
  Creating a new branch, Xalan3, for experimentation with XPath2 support.
  
  Currently the changes are limited to org.apache.xml.dtm -- enabling
  datatype support by tying into Xerces' low-level XNI layer, which
  includes experimental support for  post-schema-validation Infoset
  (PSVI) information. Eventually we'll be patching other portions of
  Xalan to actually retrieve and use this data.
  
  The code I'm now checking in is NOT in final form. Known issues:
  
  1) The logic in DTMManager which enables this behavior is
  something of a kluge -- it only kicks in if you parse incrementally
  from a StreamSource. The getDTM() method really wants to be
  rationalized somewhat, which will make adding XNI easier.
  
  2) The storage for datatype information currently adds another
  column to the DTM table. We really want to switch to associating
  the datatype with the Expanded Type table, and using some form
  of sparse array to record local overrides.
  
  3) The XNI code won't compile without Xerces2. We need to think
  about whether we want to accept that as a dependency, or use
  reflection to bind at run time rather than compile time.
  
  Note that typed values are currently computed on demand, with the
  DTM storing only the sting values. An argument could be made for
  precomputing some or all of this information and instead generating
  strings on demand (see the XPath2 Data Model spec for discussion
  of that alternative). But that's a considerably larger change, and
  would affect non-type-based users of XSLT as well since it would
  present values in their normalized form rather than as entered; I'd
  rather not go that route until we have a string-based alternative
  fully functional.
  
  Revision  Changes    Path
  1.1                  xml-xalan/java/src/org/apache/xml/dtm/XSequence.java
  
  Index: XSequence.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 1999 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xalan" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999, Lotus
   * Development Corporation., http://www.lotus.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
   
  // %REVIEW% Should this move to the XPath packages? 
  package org.apache.xml.dtm;
  
  import java.util.Vector;
  
  
  /** This interface provides an API representation for the XPath 2 Data Model's "Sequences"
   * -- which are the basic representation for typed values. Only built-in types, 
   * types derived from built-ins, and sets thereof are returned directly by the XPath2
   * DM; complex schema-types must be accessed through the document tree.
   * 
   * It also defines a manefest constant, EMPTY, which is a singleton immutable 
   * XSequence with no contents. Per the XPath2 spec, this should be returned rather
   * than null when no typed value exists.
   * 
   * %REVIEW% Should this be moved to the XPath package?
   * */
  public interface XSequence {
  	/** @return the number of members in this sequence. */
  	public int getLength();
  	
  	/** Retrieve the value for this member of the sequence. Since values may be
  	 * a heterogenous mix, and their type may not be known until they're examined,
  	 * they're returned as Objects. This is storage-inefficient if the value(s)
  	 * is/are builtins that map to Java primitives. Tough.
  	 * 
  	 * @param index 0-based index into the sequence.
  	 * @return the specified value
  	 * @throws exception if index <0 or >=length	 
  	 * */
  	public Object getValue(int index);
  	
  	/** Retrieve the datatype namespace URI for this member of the sequence.
  	 * 
  	 * @param index 0-based index into the sequence.
  	 * @return the namespace for the specified value's type
  	 * @throws exception if index <0 or >=length	 
  	 * */
  	public String getTypeNS(int index);
  	
  	/** Retrieve the datatype namespace URI for this member of the sequence.
  	 * 
  	 * %REVIEW% Do we really need type -- 
  	 * or can we just tell folks to do instanceOf on the Java value objects?	
  	 * 
  	 * @param index 0-based index into the sequence.
  	 * @return the localname of the specified value's type
  	 * @throws exception if index <0 or >=length	 
  	 * */
  	public String getTypeLocalName(int index);
  	
  	/** Ask whether this member's datatype equals or is derived from a specified
  	 * schema NSURI/localname pair.
  	 * 
  	 * @param index 0-based index into the sequence.
  	 * @return true if the type is an instance of this schema datatype,
  	 * false if it isn't.
  	 * @throws exception if index <0 or >=length	 
  	 * */
  	public boolean isSchemaType(int index, String namespace, String localname);
  	
  	public static final XSequence EMPTY= new XSequence() {
  		public int getLength()
  		{ return 0; }
  		
  		public Object getValue(int index)
  		{ throw new java.lang.ArrayIndexOutOfBoundsException(); }
  		
  		public String getTypeNS(int index)
  		{ throw new java.lang.ArrayIndexOutOfBoundsException(); }
  		
  		public String getTypeLocalName(int index)
  		{ throw new java.lang.ArrayIndexOutOfBoundsException(); }
  		
  		public boolean isSchemaType(int index, String namespace, String localname)
  		{ throw new java.lang.ArrayIndexOutOfBoundsException(); }
  	};
  }
  
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org