Methods Summary |
---|
void | appendTypeInfo(java.lang.StringBuffer str)
String contentType[] = {"EMPTY", "SIMPLE", "ELEMENT", "MIXED"};
String derivedBy[] = {"EMPTY", "EXTENSION", "RESTRICTION"};
str.append("Complex type name='").append(fTargetNamespace).append(",").append(getTypeName()).append("', ");
if (fBaseType != null) {
str.append(" base type name='").append(fBaseType.getName()).append("', ");
}
str.append(" content type='").append(contentType[fContentType]).append("', ");
str.append(" isAbstract='").append(getAbstract()).append("', ");
str.append(" hasTypeId='").append(containsTypeID()).append("', ");
str.append(" final='").append(fFinal).append("', ");
str.append(" block='").append(fBlock).append("', ");
if (fParticle != null) {
str.append(" particle='").append(fParticle.toString()).append("', ");
}
str.append(" derivedBy='").append(derivedBy[fDerivedBy]).append("'. ");
|
public boolean | containsTypeID()
// methods to get/set misc flag
return((fMiscFlags & CT_HAS_TYPE_ID) != 0);
|
public boolean | derivedFrom(java.lang.String ancestorNS, java.lang.String ancestorName, short derivationMethod)
// ancestor is null, retur false
if (ancestorName == null)
return false;
// ancestor is anyType, return true
if (ancestorNS != null &&
ancestorNS.equals(SchemaSymbols.URI_SCHEMAFORSCHEMA) &&
ancestorName.equals(SchemaSymbols.ATTVAL_ANYTYPE)) {
return true;
}
// recursively get base, and compare it with ancestor
XSTypeDefinition type = this;
while (!(ancestorName.equals(type.getName()) &&
((ancestorNS == null && type.getNamespace() == null) ||
(ancestorNS != null && ancestorNS.equals(type.getNamespace())))) && // compare with ancestor
type != SchemaGrammar.fAnySimpleType && // reached anySimpleType
type != SchemaGrammar.fAnyType) { // reached anyType
type = (XSTypeDefinition)type.getBaseType();
}
return type != SchemaGrammar.fAnySimpleType &&
type != SchemaGrammar.fAnyType;
|
public boolean | derivedFromType(XSTypeDefinition ancestor, short derivationMethod)
// ancestor is null, retur false
if (ancestor == null)
return false;
// ancestor is anyType, return true
if (ancestor == SchemaGrammar.fAnyType)
return true;
// recursively get base, and compare it with ancestor
XSTypeDefinition type = this;
while (type != ancestor && // compare with ancestor
type != SchemaGrammar.fAnySimpleType && // reached anySimpleType
type != SchemaGrammar.fAnyType) { // reached anyType
type = type.getBaseType();
}
return type == ancestor;
|
public boolean | getAbstract(){abstract} A boolean. Complex types for which {abstract} is true must
not be used as the {type definition} for the validation of element
information items.
return((fMiscFlags & CT_IS_ABSTRACT) != 0);
|
public XSObjectList | getAnnotations()Optional. Annotation.
return (fAnnotations != null) ? fAnnotations : XSObjectListImpl.EMPTY_LIST;
|
public boolean | getAnonymous()A boolean that specifies if the type definition is anonymous.
Convenience attribute. This is a field is not part of
XML Schema component model.
return((fMiscFlags & CT_IS_ANONYMOUS) != 0);
|
public XSAttributeGroupDecl | getAttrGrp()
return fAttrGrp;
|
public XSAttributeUse | getAttributeUse(java.lang.String namespace, java.lang.String name)
return fAttrGrp.getAttributeUse(namespace, name);
|
public XSObjectList | getAttributeUses(){attribute uses} A set of attribute uses.
return fAttrGrp.getAttributeUses();
|
public XSWildcard | getAttributeWildcard(){attribute wildcard} Optional. A wildcard.
return fAttrGrp.getAttributeWildcard();
|
public XSTypeDefinition | getBaseType(){base type definition} Either a simple type definition or a complex
type definition.
return fBaseType;
|
public org.apache.xerces.impl.xs.models.XSCMValidator | getContentModel(org.apache.xerces.impl.xs.models.CMBuilder cmBuilder)
return getContentModel(cmBuilder, false);
|
public synchronized org.apache.xerces.impl.xs.models.XSCMValidator | getContentModel(org.apache.xerces.impl.xs.models.CMBuilder cmBuilder, boolean forUPA)
if (fCMValidator == null) {
if (forUPA) {
if (fUPACMValidator == null) {
fUPACMValidator = cmBuilder.getContentModel(this, true);
if (fUPACMValidator != null && !fUPACMValidator.isCompactedForUPA()) {
fCMValidator = fUPACMValidator;
}
}
return fUPACMValidator;
}
else {
fCMValidator = cmBuilder.getContentModel(this, false);
}
}
return fCMValidator;
|
public short | getContentType(){content type} One of empty, a simple type definition (see
simpleType , or mixed, element-only (see
cmParticle ).
return fContentType;
|
public short | getDerivationMethod(){derivation method} Either extension or restriction. The valid constant
value for this XSConstants EXTENTION, RESTRICTION.
return fDerivedBy;
|
public short | getFinal(){final} For complex type definition it is a subset of {extension, restriction}.
return fFinal;
|
public short | getFinalSet()
return fFinal;
|
public java.lang.String | getName()The name of this XSObject depending on the
XSObject type.
return getAnonymous() ? null : fName;
|
public java.lang.String | getNamespace()The namespace URI of this node, or null if it is
unspecified. defines how a namespace URI is attached to schema
components.
return fTargetNamespace;
|
public XSNamespaceItem | getNamespaceItem()
// REVISIT: implement
return null;
|
public XSParticle | getParticle()A particle for mixed or element-only content model, otherwise
null
return fParticle;
|
public short | getProhibitedSubstitutions(){prohibited substitutions}
return fBlock;
|
public XSSimpleTypeDefinition | getSimpleType()A simple type definition corresponding to simple content model,
otherwise null
return fXSSimpleType;
|
public java.lang.String | getTargetNamespace()
return fTargetNamespace;
|
public short | getType()Get the type of the object, i.e ELEMENT_DECLARATION.
return XSConstants.TYPE_DEFINITION;
|
public short | getTypeCategory()
return COMPLEX_TYPE;
|
public java.lang.String | getTypeName()
return fName;
|
public java.lang.String | getTypeNamespace()
return getNamespace();
|
public boolean | isDOMDerivedFrom(java.lang.String ancestorNS, java.lang.String ancestorName, int derivationMethod)Checks if a type is derived from another given the the name, namespace
and derivation method. See:
http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#TypeInfo-isDerivedFrom
// ancestor is null, retur false
if (ancestorName == null)
return false;
// ancestor is anyType, return true
if (ancestorNS != null
&& ancestorNS.equals(SchemaSymbols.URI_SCHEMAFORSCHEMA)
&& ancestorName.equals(SchemaSymbols.ATTVAL_ANYTYPE)
&& (derivationMethod == DERIVATION_RESTRICTION
&& derivationMethod == DERIVATION_EXTENSION)) {
return true;
}
// restriction
if ((derivationMethod & DERIVATION_RESTRICTION) != 0) {
if (isDerivedByRestriction(ancestorNS, ancestorName,
derivationMethod, this)) {
return true;
}
}
// extension
if ((derivationMethod & DERIVATION_EXTENSION) != 0) {
if (isDerivedByExtension(ancestorNS, ancestorName,
derivationMethod, this)) {
return true;
}
}
// list or union
if ((((derivationMethod & DERIVATION_LIST) != 0) || ((derivationMethod & DERIVATION_UNION) != 0))
&& ((derivationMethod & DERIVATION_RESTRICTION) == 0)
&& ((derivationMethod & DERIVATION_EXTENSION) == 0)) {
if (ancestorNS.equals(SchemaSymbols.URI_SCHEMAFORSCHEMA)
&& ancestorName.equals(SchemaSymbols.ATTVAL_ANYTYPE)) {
ancestorName = SchemaSymbols.ATTVAL_ANYSIMPLETYPE;
}
if(!(fName.equals(SchemaSymbols.ATTVAL_ANYTYPE)
&& fTargetNamespace.equals(SchemaSymbols.URI_SCHEMAFORSCHEMA))){
if (fBaseType != null && fBaseType instanceof XSSimpleTypeDecl) {
return ((XSSimpleTypeDecl) fBaseType).isDOMDerivedFrom(ancestorNS,
ancestorName, derivationMethod);
} else if (fBaseType != null
&& fBaseType instanceof XSComplexTypeDecl) {
return ((XSComplexTypeDecl) fBaseType).isDOMDerivedFrom(
ancestorNS, ancestorName, derivationMethod);
}
}
}
// If the value of the parameter is 0 i.e. no bit (corresponding to
// restriction, list, extension or union) is set to 1 for the
// derivationMethod parameter.
if (((derivationMethod & DERIVATION_EXTENSION) == 0)
&& (((derivationMethod & DERIVATION_RESTRICTION) == 0)
&& ((derivationMethod & DERIVATION_LIST) == 0)
&& ((derivationMethod & DERIVATION_UNION) == 0))) {
return isDerivedByAny(ancestorNS, ancestorName, derivationMethod, this);
}
return false;
|
private boolean | isDerivedByAny(java.lang.String ancestorNS, java.lang.String ancestorName, int derivationMethod, XSTypeDefinition type)Checks if a type is derived from another by any combination of
restriction, list ir union. See:
http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#TypeInfo-isDerivedFrom
XSTypeDefinition oldType = null;
boolean derivedFrom = false;
while (type != null && type != oldType) {
// If the ancestor type is reached or is the same as this type.
if ((ancestorName.equals(type.getName()))
&& ((ancestorNS == null && type.getNamespace() == null)
|| (ancestorNS != null && ancestorNS.equals(type.getNamespace())))) {
derivedFrom = true;
break;
}
// Check if this type is derived from the base by restriction or
// extension
if (isDerivedByRestriction(ancestorNS, ancestorName,
derivationMethod, type)) {
return true;
} else if (!isDerivedByExtension(ancestorNS, ancestorName,
derivationMethod, type)) {
return true;
}
oldType = type;
type = type.getBaseType();
}
return derivedFrom;
|
private boolean | isDerivedByExtension(java.lang.String ancestorNS, java.lang.String ancestorName, int derivationMethod, XSTypeDefinition type)Checks if a type is derived from another by extension. See:
http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#TypeInfo-isDerivedFrom
boolean extension = false;
XSTypeDefinition oldType = null;
while (type != null && type != oldType) {
// If ancestor is anySimpleType return false.
if (ancestorNS != null
&& ancestorNS.equals(SchemaSymbols.URI_SCHEMAFORSCHEMA)
&& ancestorName.equals(SchemaSymbols.ATTVAL_ANYSIMPLETYPE)
&& SchemaSymbols.URI_SCHEMAFORSCHEMA.equals(type.getNamespace())
&& SchemaSymbols.ATTVAL_ANYTYPE.equals(type.getName())) {
break;
}
if ((ancestorName.equals(type.getName()))
&& ((ancestorNS == null && type.getNamespace() == null)
|| (ancestorNS != null && ancestorNS.equals(type.getNamespace())))) {
// returns true if atleast one derivation step was extension
return extension;
}
// If the base type is a complexType with simpleContent
if (type instanceof XSSimpleTypeDecl) {
if (ancestorNS.equals(SchemaSymbols.URI_SCHEMAFORSCHEMA)
&& ancestorName.equals(SchemaSymbols.ATTVAL_ANYTYPE)) {
ancestorName = SchemaSymbols.ATTVAL_ANYSIMPLETYPE;
}
// derivationMethod extension will always return false for a
// simpleType,
// we treat it like a restriction
if ((derivationMethod & DERIVATION_EXTENSION) != 0) {
return extension
& ((XSSimpleTypeDecl) type).isDOMDerivedFrom(
ancestorNS, ancestorName,
(derivationMethod & DERIVATION_RESTRICTION));
} else {
return extension
& ((XSSimpleTypeDecl) type).isDOMDerivedFrom(
ancestorNS, ancestorName, derivationMethod);
}
} else {
// If the base type is a complex type
// At least one derivation step upto the ancestor type should be
// extension.
if (((XSComplexTypeDecl) type).getDerivationMethod() == XSConstants.DERIVATION_EXTENSION) {
extension = extension | true;
}
}
oldType = type;
type = type.getBaseType();
}
return false;
|
private boolean | isDerivedByRestriction(java.lang.String ancestorNS, java.lang.String ancestorName, int derivationMethod, XSTypeDefinition type)Checks if a type is derived from another by restriction. See:
http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#TypeInfo-isDerivedFrom
XSTypeDefinition oldType = null;
while (type != null && type != oldType) {
// ancestor is anySimpleType, return false
if (ancestorNS != null
&& ancestorNS.equals(SchemaSymbols.URI_SCHEMAFORSCHEMA)
&& ancestorName.equals(SchemaSymbols.ATTVAL_ANYSIMPLETYPE)) {
return false;
}
// if the name and namespace of this type is the same as the
// ancestor return true
if ((ancestorName.equals(type.getName()))
&& (ancestorNS != null && ancestorNS.equals(type.getNamespace()))
|| ((type.getNamespace() == null && ancestorNS == null))) {
return true;
}
// If the base type is a complexType with simpleContent
if (type instanceof XSSimpleTypeDecl) {
if (ancestorNS.equals(SchemaSymbols.URI_SCHEMAFORSCHEMA)
&& ancestorName.equals(SchemaSymbols.ATTVAL_ANYTYPE)) {
ancestorName = SchemaSymbols.ATTVAL_ANYSIMPLETYPE;
}
return ((XSSimpleTypeDecl) type).isDOMDerivedFrom(ancestorNS,
ancestorName, derivationMethod);
} else {
// If the base type is a complex type
// Every derivation step till the base type should be
// restriction. If not return false
if (((XSComplexTypeDecl) type).getDerivationMethod() != XSConstants.DERIVATION_RESTRICTION) {
return false;
}
}
oldType = type;
type = type.getBaseType();
}
return false;
|
public boolean | isDerivedFrom(java.lang.String typeNamespaceArg, java.lang.String typeNameArg, int derivationMethod)
return isDOMDerivedFrom(typeNamespaceArg, typeNameArg, derivationMethod);
|
public boolean | isFinal(short derivation){final} For complex type definition it is a subset of {extension,
restriction}. For simple type definition it is a subset of
{extension, list, restriction, union}.
return (fFinal & derivation) != 0;
|
public boolean | isProhibitedSubstitution(short prohibited){prohibited substitutions} A subset of {extension, restriction}.
return (fBlock & prohibited) != 0;
|
public void | reset()
fName = null;
fTargetNamespace = null;
fBaseType = null;
fDerivedBy = XSConstants.DERIVATION_RESTRICTION;
fFinal = XSConstants.DERIVATION_NONE;
fBlock = XSConstants.DERIVATION_NONE;
fMiscFlags = 0;
// reset attribute group
fAttrGrp.reset();
fContentType = CONTENTTYPE_EMPTY;
fXSSimpleType = null;
fParticle = null;
fCMValidator = null;
fUPACMValidator = null;
if(fAnnotations != null) {
// help out the garbage collector
fAnnotations.clear();
}
fAnnotations = null;
|
public void | setContainsTypeID()
fMiscFlags |= CT_HAS_TYPE_ID;
|
public void | setIsAbstractType()
fMiscFlags |= CT_IS_ABSTRACT;
|
public void | setIsAnonymous()
fMiscFlags |= CT_IS_ANONYMOUS;
|
public void | setName(java.lang.String name)
fName = name;
|
public void | setValues(java.lang.String name, java.lang.String targetNamespace, XSTypeDefinition baseType, short derivedBy, short schemaFinal, short block, short contentType, boolean isAbstract, XSAttributeGroupDecl attrGrp, org.apache.xerces.impl.dv.XSSimpleType simpleType, XSParticleDecl particle, org.apache.xerces.impl.xs.util.XSObjectListImpl annotations)
fTargetNamespace = targetNamespace;
fBaseType = baseType;
fDerivedBy = derivedBy;
fFinal = schemaFinal;
fBlock = block;
fContentType = contentType;
if(isAbstract)
fMiscFlags |= CT_IS_ABSTRACT;
fAttrGrp = attrGrp;
fXSSimpleType = simpleType;
fParticle = particle;
fAnnotations = annotations;
|
public java.lang.String | toString()
StringBuffer str = new StringBuffer();
appendTypeInfo(str);
return str.toString();
|