You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by ne...@apache.org on 2002/02/27 17:56:42 UTC
cvs commit: xml-xerces/java/samples/simpletype SimpleTypeUsage.java
neeraj 02/02/27 08:56:42
Added: java/samples/simpletype SimpleTypeUsage.java
Log:
This class uses schema datatype implementation as separate library.
It shows,
1. querying property information of Simple Type Definition Schema
Component as defined,
http://www.w3.org/TR/xmlschema-1/#Simple_Type_Definition_details
2. get built-in type/s and create new types as derived by
restriction, list or union, using factory methods of SchemaDVFactory.
3. using those simple type (built-in/created) to validate the values.
4. switching to different simple type implementation.
Revision Changes Path
1.1 xml-xerces/java/samples/simpletype/SimpleTypeUsage.java
Index: SimpleTypeUsage.java
===================================================================
/*
* The Apache Software License, Version 1.1
*
*
* Copyright (c) 2001 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 "Xerces" 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, International
* Business Machines, Inc., http://www.apache.org. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package simpletype;
import org.apache.xerces.impl.dv.SchemaDVFactory;
import org.apache.xerces.impl.dv.XSSimpleType;
import org.apache.xerces.impl.dv.XSAtomicSimpleType;
import org.apache.xerces.impl.dv.XSListSimpleType;
import org.apache.xerces.impl.dv.XSUnionSimpleType;
import org.apache.xerces.impl.dv.XSFacets;
import org.apache.xerces.impl.dv.ValidatedInfo;
import org.apache.xerces.impl.dv.InvalidDatatypeFacetException;
import org.apache.xerces.impl.dv.InvalidDatatypeValueException;
import org.apache.xerces.impl.xs.XSTypeDecl;
import org.apache.xerces.impl.xs.SchemaSymbols;
import org.apache.xerces.impl.validation.ValidationContext;
import org.apache.xerces.impl.validation.ValidationState;
import java.util.Vector;
/**
* It demonstrates how to use the interfaces defined in 'org.apache.xerces.impl.dv'
* package for the purpose of
* 1. how to query property information of Simple Type Definition Schema Component.
* 2. how to get instance of SchemaDVFactory implementation.
* 3. how to get built-in type/s and create new types as derived by restriction, list
* or union, using factory methods of SchemaDVFactory.
* 4. how to use those simple type (built-in/created) to validate the values.
* This class is useful for any application which wants to use the simple type
* implementation directly as separate module.
*
* @author Neeraj Bajaj Sun Microsystems, inc.
*
*/
public class SimpleTypeUsage{
static SchemaDVFactory factory = null;
XSFacets facets = new XSFacets();
short fPresentFacets ;
short fFixedFacets ;
short fFinalSet ;
public SimpleTypeUsage(){
//Any application willing to switch to different implementation should
//call SchemaDVFactory#setFactoryClass() as the first step before calling
//SchemaDVFactory#getInstance().
//Suppose application wants to use class 'MySchemaDVFactoryImpl' as SchemaDVFactory
// implementation which resides in say 'myApp.simpleType' package.
//SchemaDVFactory.setFactoryClass("myApp.simpleType.MySchemaDVFactoryImpl.class");
//this will give the instance of default implementation (SchemaDVFactoryImpl)
// in 'org.apache.xerces.impl.dv.xs_new' package.
factory = SchemaDVFactory.getInstance();
} //SimpleTypeUsage()
/**
* Get proper validation context, it provides the information required for the validation of datatypes id, idref,
* entity, notation, qname , we need to get appropriate validation context for validating the content or creating
* simple type (applyFacets).
* @return ValidationContext
*/
private ValidationContext getValidationContext(){
ValidationState validationState = null;
// create an instance of 'ValidationState' providing the information required for the
// validation of datatypes id, idref, entity, notation, qname.
// application can also provide its own implementation of ValidationContext if required,
// an implementation of 'ValidationContext' is in 'org.apache.xerces.impl.validation' package.
validationState = new ValidationState();
// application need to pass validation context while validating string, object or creating simple type (applyFacets)
// derived by restriction, should set the following information accordingly
//application should provide the namespace support by calling
//validationState.setNamespaceSupport(...);
//application can also provide 'SymbolTable' (org.apache.xerces.util.SymbolTable) like
//validationState.setSymbolTable(....);
//set proper value (true/false) for the given validation context
//validationState.setFacetChecking(true);
//set proper value (true/false) for the given validation context
//validationState.setExtraChecking(false);
return validationState;
}
/**
* this method shows how to validate the content against the given simple type.
*
* @param String content to validate
* @param XSSimpleType SimpleType Definition schema component against which to validate the content.
*
* @return ValidatedInfo validatedInfo object.
*/
public ValidatedInfo validateString(String content, XSSimpleType simpleType){
//create an instance of 'ValidatedInfo' to get back information (like actual value,
//normalizedValue etc..)after content is validated.
ValidatedInfo validatedInfo = new ValidatedInfo();
//get proper validation context , this is very important we need to get appropriate validation context while validating content
//validation context passed is generally different while validating content and creating simple type (applyFacets)
ValidationContext validationState = getValidationContext();
try{
simpleType.validate(content, validationState, validatedInfo);
}catch(InvalidDatatypeValueException ex){
System.err.println(ex.getMessage());
}
//now 'validatedInfo' object contains information
// for number types (decimal, double, float, and types derived from them),
// Object return is BigDecimal, Double, Float respectively.
// for some types (string and derived), they just return the string itself
Object value = validatedInfo.actualValue;
//so returned Object can be casted to actual java object like..
//Boolean booleanDT = (Boolean)value;
//The normalized value of a string value
String normalizedValue = validatedInfo.normalizedValue ;
//If the type is a union type, then the member type which
//actually validated the string value.
XSSimpleType memberType = validatedInfo.memberType ;
return validatedInfo;
}//validateString()
/**
* this method shows how to query information about the different properties of 'Simple Type'
* definiton schema component. It prints the values of properties of 'SimpleType Definition
* Schema Component'.
*
* @param simpleType object of XSSimpleType
*/
public void querySimpleType(XSSimpleType simpleType){
//getting information about the different properties of 'Simple Type' definition schema component.
System.err.println();
System.err.println( "Properties information of 'Simple Type' definiton schema component" );
System.err.println();
// 'name' property
if( simpleType.isAnonymous() )
System.err.println( "Anonymous Simple Type" );
else{
System.err.println("'name' \t\t\t\t: " + simpleType.getTypeName() );
}
//'target namespace' property
String targetNameSpace = simpleType.getTargetNamespace() ;
System.err.println("'target namespace' \t\t: " + targetNameSpace );
// 'variety' property
short variety = simpleType.getVariety();
printVariety(variety);
//'base type definition' property
XSTypeDecl baseType = simpleType.getBaseType() ;
System.err.println("'base type definition' name \t: " + ( baseType != null ? baseType.getTypeName() : "null" ) );
System.err.println("'base type definition' target namespace : " + ( baseType != null ? baseType.getTypeName() : "null" ) );
//check if base type is simple or complex
if(baseType != null && (baseType.getXSType() == XSTypeDecl.SIMPLE_TYPE) ){
//now we can get all the details of base type
XSSimpleType simpleTypeDecl = (XSSimpleType)baseType;
}
// 'facets' property
// gives bit combination of the constants defined in XSSimpleType interface.
short facets = simpleType.getDefinedFacets() ;
printFacets(facets);
//'final' property
//the explicit values of this property extension, restriction, list and union prevent further
//derivations by extension (to yield a complex type) and restriction (to yield a simple type)
//and use in constructing lists and unions respectively.
short finalSet = simpleType.getFinalSet() ;
printFinal(finalSet);
//if variety is 'list'
if( variety == XSSimpleType.VARIETY_LIST ){
// 'Item Type definition' property of List Simple Type Definition Schema Component.
XSSimpleType listDecl = ((XSListSimpleType)simpleType).getItemType() ;
}else if(variety == XSSimpleType.VARIETY_UNION ){
// 'Member Type definitions' property of Union Simple Type Definition Schema Component.
XSSimpleType [] memberTypes = ((XSUnionSimpleType)simpleType).getMemberTypes() ;
}
//fundamental facet information
//ordered schema component
short ordered = simpleType.getOrderedFacet();
printOrdered(ordered);
//bounded schema component
boolean bounded = simpleType.isBounded();
if(bounded){
System.err.println("'bounded' \t\t\t\t: true" );
}
else{
System.err.println("'bounded' \t\t\t\t: false" );
}
//cardinality schema component
short cardinality = simpleType.getCardinalityFacet();
printCardinality(cardinality);
//numeric schema component
boolean numeric = simpleType.isNumeric();
if(numeric){
System.err.println("'numeric' \t\t\t\t: true" );
}
else{
System.err.println("'numeric' \t\t\t\t: false" );
}
}//getInformation()
void printOrdered (short ordered){
switch(ordered){
case XSSimpleType.ORDERED_FALSE:
System.err.println("'ordered' \t\t\t\t: false" );
break;
case XSSimpleType.ORDERED_PARTIAL:
System.err.println("'ordered' \t\t\t\t: partial" );
break;
case XSSimpleType.ORDERED_TOTAL:
System.err.println("'ordered' \t\t\t\t: total" );
break;
}
}//printOrdered()
void printCardinality (short cardinality){
if(cardinality == XSSimpleType.CARDINALITY_COUNTABLY_INFINITE){
System.err.println("'cardinality' \t\t\t\t: countably infinite" );
}else if(cardinality == XSSimpleType.CARDINALITY_FINITE)
System.err.println("'cardinality' \t\t\t\t: finite" );
}//printCardinality()
void printFacets(short facets){
System.err.println("'facets' present \t\t: " );
if(( facets & XSSimpleType.FACET_ENUMERATION) != 0){
System.err.println("\t\t\t\t ENUMERATION");
}
if((facets & XSSimpleType.FACET_LENGTH) != 0){
System.err.println("\t\t\t\t LENGTH");
}
if((facets & XSSimpleType.FACET_MINLENGTH) != 0){
System.err.println("\t\t\t\t MINLENGTH");
}
if((facets & XSSimpleType.FACET_MAXLENGTH) != 0){
System.err.println("\t\t\t\t MAXLENGTH");
}
if((facets & XSSimpleType.FACET_PATTERN) != 0){
System.err.println("\t\t\t\t PATTERN");
}
if((facets & XSSimpleType.FACET_WHITESPACE) != 0){
System.err.println("\t\t\t\t WHITESPACE");
}
if((facets & XSSimpleType.FACET_MAXINCLUSIVE) != 0){
System.err.println("\t\t\t\t MAXINCLUSIVE");
}
if((facets & XSSimpleType.FACET_MAXEXCLUSIVE) != 0){
System.err.println("\t\t\t\t MAXEXCLUSIVE");
}
if((facets & XSSimpleType.FACET_MININCLUSIVE) != 0){
System.err.println("\t\t\t\t MININCLUSIVE");
}
if((facets & XSSimpleType.FACET_MINEXCLUSIVE) != 0){
System.err.println("\t\t\t\t MINEXCLUSIVE");
}
if((facets & XSSimpleType.FACET_TOTALDIGITS) != 0){
System.err.println("\t\t\t\t TOTALDIGITS");
}
if((facets & XSSimpleType.FACET_FRACTIONDIGITS) != 0){
System.err.println("\t\t\t\t FRACTIONDIGITS");
}
}//printFacets()
void printFinal(short finalSet){
System.err.println("'final' values \t\t\t: " );
if ((finalSet & SchemaSymbols.EXTENSION ) != 0){
System.err.println("\t\t\t\t Extension");
}
if ((finalSet & SchemaSymbols.RESTRICTION) != 0){
System.err.println("\t\t\t\t Restriction");
}
if((finalSet & SchemaSymbols.LIST ) != 0){
System.err.println("\t\t\t\t List");
}
if((finalSet & SchemaSymbols.UNION ) != 0){
System.err.println("\t\t\t\t Union");
}
if((finalSet & SchemaSymbols.EMPTY_SET ) != 0){
System.err.println("\t\t\t\t EMPTY");
}
}
void printVariety(short variety){
switch(variety){
case XSSimpleType.VARIETY_ATOMIC:
System.err.println("'variety' \t\t\t: ATOMIC");
break;
case XSSimpleType.VARIETY_LIST:
System.err.println("'variety' \t\t\t: LIST");
break;
case XSSimpleType.VARIETY_UNION:
System.err.println("'variety' \t\t\t: UNION");
break;
default:
System.err.println("Invalid value of 'Variety' property , it should be one of atomic, list or union.");
break;
}
} //printVariety()
public static void main(String [] args){
SimpleTypeUsage usage = new SimpleTypeUsage();
if(args.length == 1 ){
XSSimpleType builtInType = factory.getBuiltInType(args[0]);
if(builtInType == null){
System.err.println("Invalid built-in Simple datatype given as argument.");
printUsage();
}
else {
usage.querySimpleType(builtInType);
}
}else{
printUsage();
}
}//main()
static void printUsage(){
System.err.println("USAGE: java simpletype.SimpleTypeUsage 'Built-InDatatypeName' ");
System.err.println();
System.err.println(" Built-InDatatypeName \t\tBuilt-In Datatype name as defined by W3C Schema Spec, \n\t\t\t\t\t \"http://www.w3.org/TR/xmlschema-2/#built-in-datatypes\" .");
System.err.println();
}
}//class SimpleTypeUsage
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org