com.saxonica.schema.sdoc
Class XSDSchema

java.lang.Object
  extended by net.sf.saxon.tree.linked.NodeImpl
      extended by net.sf.saxon.tree.linked.ElementImpl
          extended by com.saxonica.schema.sdoc.SchemaElement
              extended by com.saxonica.schema.sdoc.XSDSchema
All Implemented Interfaces:
Source, SourceLocator, PullEvent, FingerprintedNode, Item<NodeInfo>, MutableNodeInfo, NamespaceResolver, NodeInfo, ValueRepresentation<NodeInfo>, SiblingCountingNode

public class XSDSchema
extends SchemaElement

An xs:schema element in an XML Schema document


Nested Class Summary
 
Nested classes/interfaces inherited from class com.saxonica.schema.sdoc.SchemaElement
SchemaElement.XPathStaticContext
 
Field Summary
 
Fields inherited from class com.saxonica.schema.sdoc.SchemaElement
NAMESPACE_ANY, NAMESPACE_LOCAL, NAMESPACE_OTHER, NAMESPACE_TARGET, REQUIRE_NULL_NS, REQUIRE_TARGET_NS, USE_DEFAULT_NS, USE_DEFAULT_NS_WITHOUT_IMPORT
 
Fields inherited from class net.sf.saxon.tree.linked.NodeImpl
NODE_LETTER
 
Fields inherited from interface net.sf.saxon.om.NodeInfo
ALL_NAMESPACES, IS_DTD_TYPE, IS_NILLED, LOCAL_NAMESPACES, NO_NAMESPACES
 
Constructor Summary
XSDSchema()
          Create an XSDSchema object, representing the xs:schema element in a schema document
 
Method Summary
protected  void addChild(NodeImpl node, int index)
          Add a child node to this node.
 void addGlobalParam(GlobalParam param)
          Declare a global parameter for XPath expressions in this schema document (Saxon extension)
 void compact(int size)
          Compact the space used by this node
 boolean defaultOpenContentAppliesToEmpty()
          Ask if the default open content wildcard applies to types that would otherwise have an EMPTY content model
protected  AxisIterator enumerateChildren(NodeTest test)
          Get an enumeration of the children of this node
 Set<String> getAllowedExtensions()
          Get the set of extensions allowed in this schema document
 String getAttributeFormDefault()
          Returns the attributeFormDefault property of this Schema.
 int getBlockDefault()
          Returns the default BlockList for this Schema.
 AttributeGroupReference getDefaultAttributeGroupReference()
          Get a reference to the default attribute group
 String getDefaultOpenContentMode()
          Get the default open content mode, as a string (interleave or suffix)
 Wildcard getDefaultOpenContentWildcard()
          Get the default open content wildcard, if any
 String getElementFormDefault()
          Returns the elementFormDefault property of this Schema.
 int getErrorCount()
          Get the number of errors detected in this schema document
 Executable getExecutable()
          Get the Executable corresponding to this schema document.
 int getFinalDefault()
          Returns the default FinalList for this Schema.
 NodeInfo getFirstChild()
          Get the first child node of the element
 GlobalParam getGlobalParam(StructuredQName name)
          Get the GlobalParam object representing a named parameter (Saxon extension)
 Collection<GlobalParam> getGlobalParams()
          Return the set of global parameters defined in this schema document
 NodeInfo getLastChild()
          Get the last child node of the element
protected  NodeImpl getNthChild(int n)
          Get the nth child node of the element (numbering from 0)
 int getNumberOfChildren()
          Determine how many children the node has
protected  int getRawSequenceNumber()
           
 SingleNamespaceSchema getSchema()
          Get the PreparedSchema to which schema components are being added
 SchemaCompiler getSchemaCompiler()
          Get the SchemaCompiler in use
protected  long getSequenceNumber()
          Get the node sequence number (in document order).
 String getStringValue()
          Return the string-value of the node, that is, the concatenation of the character content of all descendent elements and text nodes.
 CharSequence getStringValueCS()
          Get the value of the item as a CharSequence.
 String getTargetNamespace()
          Get the target namespace of this schema document.
 String getXPathDefaultNamespace()
          Get the value of the defaultXPathDefaultNamespace attribute defined on this element
 boolean hasChildNodes()
          Determine if the node has any children.
 void incrementErrorCount()
          Increment the number of errors detected in this schema document
 void insertChildren(NodeInfo[] source, boolean atStart, boolean inherit)
          Insert a sequence of nodes as children of this node.
protected  void insertChildrenAt(NodeInfo[] source, int index, boolean inherit)
          Insert children before or after a given existing child
 boolean isChameleon()
          Determine if this is a chameleon schema document, that is, one with no targetNamespace of its own, whose effective target namespace (and for many purposes, default namespace) are set to the targetNamespace of the referring schema document.
protected  boolean isFinalState(int state)
          For elements whose content model is parsed using a finite state machine, test whether a given state is a final state.
 boolean isImportedNamespace(String uri)
          Determine whether a given URI is that of a namespace that has been imported into this schema document.
 void postValidate(SchemaCompiler compiler)
          Process child elements after validation
 void prepareAttributes()
          Validate and process the attributes on this element in the schema document
protected  void removeChild(NodeImpl child)
          Remove a given child
protected  void replaceChildrenAt(NodeInfo[] source, int index, boolean inherit)
          Replace child at a given index by new children
 void setAttributeFormDefault(String attributeFormDefault)
          Sets the attributeFormDefault property of this Schema.
 void setBlockDefault(int value)
          Sets the default Block values for this Schema.
protected  void setChildren(Object children)
          Set the children of this node
 void setDefaultOpenContent(Wildcard wildcard, String mode, boolean appliesToEmpty)
          Set the open content wildcard and mode
 void setElementFormDefault(String elementFormDefault)
          Sets the elementFormDefault property of this Schema.
 void setFinalDefault(int value)
          Set the default "final" list for this Schema.
protected  void setRawSequenceNumber(int seq)
           
 void setReferrer(SchemaElement referrer)
          Set the xs:include, xs:import, or xs:redefine element that caused this schema document to be loaded
 void setSchema(SingleNamespaceSchema schema)
          Set the SingleNamespaceSchema to which schema components are being added
 void setSchemaCompiler(SchemaCompiler manager)
          Set the SchemaCompiler in use
 void validate(SchemaCompiler compiler)
          Validate this schema element, checking all document-level constraints
protected  void validateChildren(SchemaCompiler compiler)
          Validate the children of this node, recursively.
 
Methods inherited from class com.saxonica.schema.sdoc.SchemaElement
allocateAnonymousTypeCode, allowAttributes, checkContentModel, checkLocalTargetNamespace, checkMutuallyExclusiveAttributes, checkOnlyChildIsAnnotation, checkPermittedType, duplicate, duplicateElement, error, error, getContainingComplexType, getContainingSimpleType, getFingerprint, getNameCode, getSchemaNodeFactory, getXSDSchema, illegalElement, indefiniteArticle, invalidAttributeValue, isTopLevel, makeNamespaceContext, missingAttribute, missingChildElement, mustBeFirstElement, mustBeLastElement, mustPrecede, mutuallyExclusive, mutuallyExclusiveAttributes, mutuallyExclusiveElementAndAttribute, parseBooleanAttribute, parseFinalOrBlock, processAllAttributes, processAllowedNamespaces, processDisallowedNamespaces, processDisallowedQNames, processId, processMaxOccurs, processMinOccurs, requireAttribute, setSchemaNodeFactory, validateSubtree, warning
 
Methods inherited from class net.sf.saxon.tree.linked.ElementImpl
addAttribute, addNamespace, copy, delete, fixupInsertedNamespaces, generateId, getAttributeList, getAttributeValue, getAttributeValue, getBaseURI, getColumnNumber, getDeclaredNamespaces, getDocumentRoot, getLineNumber, getNameCode, getNamespaceList, getNodeKind, getPrefixForURI, getRoot, getSchemaType, getSystemId, getTypeAnnotation, getURIForPrefix, gsetAttributeCollection, initialise, isId, isNilled, iteratePrefixes, removeAttribute, removeTypeAnnotation, rename, replaceStringValue, setAttributeList, setLocation, setNameCode, setNamespaceDeclarations, setNamespaceList, setSystemId, setTypeAnnotation
 
Methods inherited from class net.sf.saxon.tree.linked.NodeImpl
atomize, compareOrder, equals, getConfiguration, getDisplayName, getDocumentNumber, getFingerprint, getLocalPart, getNamePool, getNextInDocument, getNextSibling, getParent, getPhysicalRoot, getPrefix, getPreviousInDocument, getPreviousSibling, getPublicId, getRawParent, getSiblingPosition, getTypedValue, getURI, insertSiblings, isDeleted, isIdref, isSameNodeInfo, iterateAxis, iterateAxis, newBuilder, replace, setRawParent, setSiblingPosition
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface net.sf.saxon.om.NodeInfo
hashCode
 

Constructor Detail

XSDSchema

public XSDSchema()
Create an XSDSchema object, representing the xs:schema element in a schema document

Method Detail

getSchema

public SingleNamespaceSchema getSchema()
Get the PreparedSchema to which schema components are being added

Overrides:
getSchema in class SchemaElement
Returns:
the PreparedSchema containing the compiled schema components

getExecutable

public Executable getExecutable()
Get the Executable corresponding to this schema document. This is a container for the XPath expressions it contains.

Returns:
the Executable for XPath expressions

getAllowedExtensions

public Set<String> getAllowedExtensions()
Get the set of extensions allowed in this schema document

Returns:
the set of allowed extensions (from the saxon:extensions attribute)

setSchema

public void setSchema(SingleNamespaceSchema schema)
Set the SingleNamespaceSchema to which schema components are being added

Parameters:
schema - the SingleNamespaceSchema containing the compiled schema components

setSchemaCompiler

public void setSchemaCompiler(SchemaCompiler manager)
Set the SchemaCompiler in use

Parameters:
manager - the schema compiler

getSchemaCompiler

public SchemaCompiler getSchemaCompiler()
Get the SchemaCompiler in use

Returns:
the schema compiler

setReferrer

public void setReferrer(SchemaElement referrer)
Set the xs:include, xs:import, or xs:redefine element that caused this schema document to be loaded

Parameters:
referrer - the referring xs:include, xs:import, or xs:redefine element

isChameleon

public boolean isChameleon()
Determine if this is a chameleon schema document, that is, one with no targetNamespace of its own, whose effective target namespace (and for many purposes, default namespace) are set to the targetNamespace of the referring schema document.

Returns:
true if this document is a chameleon

prepareAttributes

public void prepareAttributes()
                       throws SchemaException
Validate and process the attributes on this element in the schema document

Specified by:
prepareAttributes in class SchemaElement
Throws:
SchemaException - if any errors are found in the attributes

isImportedNamespace

public boolean isImportedNamespace(String uri)
Determine whether a given URI is that of a namespace that has been imported into this schema document.

Parameters:
uri - the namespace URI ("" for the null namespace)
Returns:
true if the namespace has been imported, false otherwise

validate

public void validate(SchemaCompiler compiler)
              throws SchemaException
Validate this schema element, checking all document-level constraints

Overrides:
validate in class SchemaElement
Parameters:
compiler - used for reporting errors
Throws:
SchemaException - if any XML representation constraints are violated

validateChildren

protected void validateChildren(SchemaCompiler compiler)
                         throws SchemaException
Validate the children of this node, recursively.

Overrides:
validateChildren in class SchemaElement
Parameters:
compiler - used for error reporting
Throws:
SchemaException - if the subtree is not valid

isFinalState

protected boolean isFinalState(int state)
Description copied from class: SchemaElement
For elements whose content model is parsed using a finite state machine, test whether a given state is a final state. The default implementation of this method is never used; it exists for the benefit of subclasses that do not use this mechanism

Overrides:
isFinalState in class SchemaElement
Parameters:
state - the state to be tested
Returns:
true if the given state is a final state

postValidate

public void postValidate(SchemaCompiler compiler)
                  throws SchemaException
Process child elements after validation

Overrides:
postValidate in class SchemaElement
Parameters:
compiler - used for reporting errors
Throws:
SchemaException - if errors are found

getTargetNamespace

public String getTargetNamespace()
Get the target namespace of this schema document.

Returns:
"" for the no-namespace case

getAttributeFormDefault

public String getAttributeFormDefault()
Returns the attributeFormDefault property of this Schema.

Returns:
the attributeFormDefault property of this Schema, or null if no default Form was set. If no default Form has been set, the user should assume Form.Unqualified. The value is returned as a string, "qualified" or "unqualified".

getBlockDefault

public int getBlockDefault()
Returns the default BlockList for this Schema.

Returns:
the default BlockList for this Schema, as an integer with bit-significant fields

getElementFormDefault

public String getElementFormDefault()
Returns the elementFormDefault property of this Schema.

Returns:
the elementFormDefault property of this Schema. The value is returned as a string ("qualified" or "unqualified"), or null if no default Form was set. If no default Form has been set, the user should assume "unqualified".

getFinalDefault

public int getFinalDefault()
Returns the default FinalList for this Schema.

Returns:
final the default FinalList for this Schema.

getDefaultOpenContentWildcard

public Wildcard getDefaultOpenContentWildcard()
Get the default open content wildcard, if any

Returns:
the default open content wildcard if there is one, otherwise null

getDefaultOpenContentMode

public String getDefaultOpenContentMode()
Get the default open content mode, as a string (interleave or suffix)

Returns:
the default open content mode, or null if none is defined

defaultOpenContentAppliesToEmpty

public boolean defaultOpenContentAppliesToEmpty()
Ask if the default open content wildcard applies to types that would otherwise have an EMPTY content model

Returns:
true if open content applies by default to empty types

setAttributeFormDefault

public void setAttributeFormDefault(String attributeFormDefault)
Sets the attributeFormDefault property of this Schema.

Parameters:
attributeFormDefault - the Form value of the attributeFormDefault property for this Schema, as a string, "qualified" or "unqualified". The caller is responsible for validating the value.

setBlockDefault

public void setBlockDefault(int value)
Sets the default Block values for this Schema.

Parameters:
value - the default Block values to set for this Schema, as a bit-significant integer.

setElementFormDefault

public void setElementFormDefault(String elementFormDefault)
Sets the elementFormDefault property of this Schema.

Parameters:
elementFormDefault - the Form value of the elementFormDefault property for this Schema.

setFinalDefault

public void setFinalDefault(int value)
Set the default "final" list for this Schema.

Parameters:
value - the default final values to set for this Schema, as a bit-significant integer

setDefaultOpenContent

public void setDefaultOpenContent(Wildcard wildcard,
                                  String mode,
                                  boolean appliesToEmpty)
Set the open content wildcard and mode

Parameters:
wildcard - the default open content wildcard
mode - the default open content mode, as a string
appliesToEmpty - true if the default open content wildcard applies to types that would otherwise have variety empty

getXPathDefaultNamespace

public String getXPathDefaultNamespace()
Get the value of the defaultXPathDefaultNamespace attribute defined on this element

Returns:
the value of the defaultXPathDefaultNamespace attribute, or "##local" if no value has been defined for the attribute

getDefaultAttributeGroupReference

public AttributeGroupReference getDefaultAttributeGroupReference()
Get a reference to the default attribute group

Returns:
a reference to the default attribute group if there is one, or null otherwise

getErrorCount

public int getErrorCount()
Get the number of errors detected in this schema document

Returns:
the number of errors detected

incrementErrorCount

public void incrementErrorCount()
Increment the number of errors detected in this schema document


addGlobalParam

public void addGlobalParam(GlobalParam param)
                    throws SchemaException
Declare a global parameter for XPath expressions in this schema document (Saxon extension)

Parameters:
param - the details of the parameter
Throws:
SchemaException

getGlobalParam

public GlobalParam getGlobalParam(StructuredQName name)
Get the GlobalParam object representing a named parameter (Saxon extension)

Parameters:
name - the parameter name
Returns:
the GlobalParam object if a parameter with this name exists, else null

getGlobalParams

public Collection<GlobalParam> getGlobalParams()
Return the set of global parameters defined in this schema document

Returns:
the set of global parameters

getSequenceNumber

protected final long getSequenceNumber()
Get the node sequence number (in document order). Sequence numbers are monotonic but not consecutive. In the current implementation, parent nodes (elements and document nodes) have a zero least-significant word, while namespaces, attributes, text nodes, comments, and PIs have the top word the same as their owner and the bottom half reflecting their relative position. For nodes added by XQUery Update, the sequence number is -1L

Overrides:
getSequenceNumber in class NodeImpl
Returns:
the sequence number if there is one, or -1L otherwise.

getRawSequenceNumber

protected final int getRawSequenceNumber()

setRawSequenceNumber

protected final void setRawSequenceNumber(int seq)

setChildren

protected final void setChildren(Object children)
Set the children of this node

Parameters:
children - null if there are no children, a single NodeInfo if there is one child, an array of NodeInfo if there are multiple children

hasChildNodes

public final boolean hasChildNodes()
Determine if the node has any children.

Specified by:
hasChildNodes in interface NodeInfo
Overrides:
hasChildNodes in class NodeImpl
Returns:
true if the node has any children, false if the node has no children.

getNumberOfChildren

public final int getNumberOfChildren()
Determine how many children the node has

Returns:
the number of children of this parent node

enumerateChildren

protected final AxisIterator enumerateChildren(NodeTest test)
Get an enumeration of the children of this node

Parameters:
test - A NodeTest to be satisfied by the child nodes, or null if all child node are to be returned
Returns:
an iterator over the children of this node

getFirstChild

public final NodeInfo getFirstChild()
Get the first child node of the element

Overrides:
getFirstChild in class NodeImpl
Returns:
the first child node of the required type, or null if there are no children

getLastChild

public final NodeInfo getLastChild()
Get the last child node of the element

Overrides:
getLastChild in class NodeImpl
Returns:
the last child of the element, or null if there are no children

getNthChild

protected final NodeImpl getNthChild(int n)
Get the nth child node of the element (numbering from 0)

Parameters:
n - identifies the required child
Returns:
the last child of the element, or null if there is no n'th child

removeChild

protected void removeChild(NodeImpl child)
Remove a given child

Parameters:
child - the child to be removed

getStringValue

public String getStringValue()
Return the string-value of the node, that is, the concatenation of the character content of all descendent elements and text nodes.

Returns:
the accumulated character content of the element, including descendant elements.
See Also:
Item.getStringValueCS()

getStringValueCS

public CharSequence getStringValueCS()
Description copied from class: NodeImpl
Get the value of the item as a CharSequence. This is in some cases more efficient than the version of the method that returns a String.

Specified by:
getStringValueCS in interface Item<NodeInfo>
Specified by:
getStringValueCS in interface ValueRepresentation<NodeInfo>
Overrides:
getStringValueCS in class NodeImpl
Returns:
the string value of the item
See Also:
Item.getStringValue()

addChild

protected void addChild(NodeImpl node,
                        int index)
Add a child node to this node. For system use only. Note: normalizing adjacent text nodes is the responsibility of the caller.

Parameters:
node - the node to be added as a child of this node. This must be an instance of NodeImpl. It will be modified as a result of this call (by setting its parent property and sibling position)
index - the position where the child is to be added

insertChildren

public void insertChildren(NodeInfo[] source,
                           boolean atStart,
                           boolean inherit)
Insert a sequence of nodes as children of this node.

This method takes no action unless the target node is a document node or element node. It also takes no action in respect of any supplied nodes that are not elements, text nodes, comments, or processing instructions.

The supplied nodes will form the new children. Adjacent text nodes will be merged, and zero-length text nodes removed. The supplied nodes may be modified in situ, for example to change their parent property and to add namespace bindings, or they may be copied, at the discretion of the implementation.

Specified by:
insertChildren in interface MutableNodeInfo
Overrides:
insertChildren in class NodeImpl
Parameters:
source - the nodes to be inserted. The implementation determines what implementation classes of node it will accept; this implementation will accept text, comment, and processing instruction nodes belonging to any implementation, but elements must be instances of ElementImpl. The supplied nodes will be modified in situ, for example to change their parent property and to add namespace bindings, if they are instances of ElementImpl; otherwise they will be copied. If the nodes are copied, then on return the supplied source array will contain the copy rather than the original.
atStart - true if the new nodes are to be inserted before existing children; false if they are to be inserted after existing children
inherit - true if the inserted nodes are to inherit the namespaces of their new parent; false if such namespaces are to be undeclared
Throws:
IllegalArgumentException - if the supplied nodes use a node implementation that this implementation does not accept.

insertChildrenAt

protected void insertChildrenAt(NodeInfo[] source,
                                int index,
                                boolean inherit)
Insert children before or after a given existing child

Parameters:
source - the children to be inserted. We allow any kind of text, comment, or processing instruction node, but element nodes must be instances of this NodeInfo implementation.
index - the position before which they are to be inserted: 0 indicates insertion before the first child, 1 insertion before the second child, and so on.
inherit - true if the inserted nodes are to inherit the namespaces that are in-scope for their new parent; false if such namespaces should be undeclared on the children

replaceChildrenAt

protected void replaceChildrenAt(NodeInfo[] source,
                                 int index,
                                 boolean inherit)
Replace child at a given index by new children

Parameters:
source - the children to be inserted
index - the position at which they are to be inserted: 0 indicates replacement of the first child, replacement of the second child, and so on. The effect is undefined if index is out of range
inherit - set to true if the new child elements are to inherit the in-scope namespaces of their new parent
Throws:
IllegalArgumentException - if any of the replacement nodes is not an element, text, comment, or processing instruction node

compact

public void compact(int size)
Compact the space used by this node

Parameters:
size - the number of actual children


Copyright (c) 2004-2011 Saxonica Limited. All rights reserved.