com.saxonica.validate
Class ContentValidator

java.lang.Object
  extended by net.sf.saxon.event.SequenceReceiver
      extended by net.sf.saxon.event.ProxyReceiver
          extended by com.saxonica.validate.ValidatingFilter
              extended by com.saxonica.validate.ContentValidator
All Implemented Interfaces:
Result, Receiver
Direct Known Subclasses:
AttributeValidator, LaxValidator, SkipValidator

public abstract class ContentValidator
extends ValidatingFilter

This class is an abstract superclass for all the validators. The class includes factory methods for constructing a validator.


Field Summary
protected  boolean nil
           
static int NIL_ALLOWED
          Constant indicating that xsi:nil is allowed and active.
static int NIL_DISALLOWED
          Constant indicating that xsi:nil is disallowed.
static int NIL_IGNORED
          Constant indicating that xsi:nil is allowed but ignored; this is true when we are validating against a type, rather than against an element declaration
protected  List<String> pendingMessages
           
protected  SchemaType xsiType
           
 
Fields inherited from class net.sf.saxon.event.ProxyReceiver
nextReceiver
 
Fields inherited from class net.sf.saxon.event.SequenceReceiver
pipelineConfiguration, previousAtomic, systemId
 
Fields inherited from interface javax.xml.transform.Result
PI_DISABLE_OUTPUT_ESCAPING, PI_ENABLE_OUTPUT_ESCAPING
 
Constructor Summary
ContentValidator(Receiver next)
           
 
Method Summary
 void endDocument()
          Notify the end of a document node
protected  SchemaType getAnnotation()
          Get the type annotation code to be used on elements validated by this validator
protected abstract  ContentValidator getChildValidator()
          Get a validator to handle the children of the current element.
protected  ConstraintChecker getConstraintChecker()
          Get the constraint checker used in this pipeline
 int getContainingElement()
          Get the fingerprint of the name of the element being validated (for diagnostics).
 int getContainingElementLocationId()
          Get the location ID of the element being validated
protected  String getContainingElementName()
          Get the containing element name, for use in error messages.
protected  ElementDecl getElementDeclaration()
          Get the element declaration that this validator is validating against
 NamespaceResolver getNamespaceResolver()
          Get the namespace resolver
 int getNillability()
          Determine whether this type permits xsi:nil = true BlockCom
abstract  SchemaType getSchemaType()
          Get the schema type against which we are validating, if any
 StartTagBufferEE getStartTagBuffer()
          Get the startTagBuffer
 boolean isNil()
          Determine whether xsi:nil = true was set on this element
static ContentValidator makeValidator(ElementDecl decl, int nameCode, int locationId, StartTagBufferEE startTagBuffer, SchemaType governingType, int validation, PipelineConfiguration pipe, Receiver nextReceiver)
          Factory method to make a validator for a particular element
static ContentValidator makeValidatorForType(ElementDecl elementDecl, SchemaType schemaType, PipelineConfiguration pipe, Receiver nextReceiver)
          Factory method to create a validator for elements of a given type
protected  void setAnnotation(SchemaType annotation)
          Set the type annotation code to be allocated by this validator
 void setConstraintChecker(ConstraintChecker checker)
          Set the constraint checker used in this pipeline
 void setContainingElement(int fingerprint, int locationId)
          Set the fingerprint identifying the name of the containing element (for diagnostics)
protected  void setElementDeclaration(ElementDecl decl)
          Set the element declaration that this validator is validating against
 void setNillability(int nillability)
          Set whether this type permits xsi:nil = true
 void setStartTagBuffer(StartTagBufferEE startTag)
          Set the StartTagBuffer, which buffers attributes on the element start tag, and also acts as the namespaceResolver to be used for resolving QName-valued attributes
 void setXSIType(SchemaType xsiType)
          Set the value of the xsi:type attribute.
 void startElement(NodeName nameCode, SchemaType typeCode, int locationId, int properties)
          Handle the start tag for a child element of the element being validated
 
Methods inherited from class com.saxonica.validate.ValidatingFilter
append, getErrorCode, getInvalidity, isInvalid, reportIfInvalid, reportValidationError, setErrorCode, setInvalidity, usesTypeAnnotations
 
Methods inherited from class net.sf.saxon.event.ProxyReceiver
attribute, characters, close, comment, endElement, getNamePool, getUnderlyingReceiver, namespace, open, processingInstruction, setPipelineConfiguration, setSystemId, setUnderlyingReceiver, setUnparsedEntity, startContent, startDocument
 
Methods inherited from class net.sf.saxon.event.SequenceReceiver
append, getConfiguration, getPipelineConfiguration, getSystemId
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

NIL_IGNORED

public static final int NIL_IGNORED
Constant indicating that xsi:nil is allowed but ignored; this is true when we are validating against a type, rather than against an element declaration

See Also:
Constant Field Values

NIL_ALLOWED

public static final int NIL_ALLOWED
Constant indicating that xsi:nil is allowed and active. That is, we are validating against an element declaration that specifies nillable=true

See Also:
Constant Field Values

NIL_DISALLOWED

public static final int NIL_DISALLOWED
Constant indicating that xsi:nil is disallowed. That is, we are validating against an element declaration that specifies nillable=false

See Also:
Constant Field Values

xsiType

protected SchemaType xsiType

nil

protected boolean nil

pendingMessages

protected List<String> pendingMessages
Constructor Detail

ContentValidator

public ContentValidator(Receiver next)
Method Detail

setContainingElement

public void setContainingElement(int fingerprint,
                                 int locationId)
Set the fingerprint identifying the name of the containing element (for diagnostics)

Parameters:
fingerprint - identifies the name of the containing element
locationId - identifies the location of the containing element

setElementDeclaration

protected void setElementDeclaration(ElementDecl decl)
Set the element declaration that this validator is validating against

Parameters:
decl - the element declaration

getElementDeclaration

protected ElementDecl getElementDeclaration()
Get the element declaration that this validator is validating against

Returns:
the element declaration

setConstraintChecker

public void setConstraintChecker(ConstraintChecker checker)
Set the constraint checker used in this pipeline

Parameters:
checker - the constraint checker

getConstraintChecker

protected ConstraintChecker getConstraintChecker()
Get the constraint checker used in this pipeline

Returns:
the constraint checker

getContainingElement

public int getContainingElement()
Get the fingerprint of the name of the element being validated (for diagnostics).

Returns:
the fingerprint, or -1 if not available.

getContainingElementLocationId

public int getContainingElementLocationId()
Get the location ID of the element being validated

Returns:
the location ID, or 0 if not available

getContainingElementName

protected String getContainingElementName()
Get the containing element name, for use in error messages.

Returns:
the name of the containing element (plus surrounding punctuation), or the string "element" if not available

getSchemaType

public abstract SchemaType getSchemaType()
Get the schema type against which we are validating, if any

Returns:
the schema type that this validator is validating against, or null

setAnnotation

protected final void setAnnotation(SchemaType annotation)
Set the type annotation code to be allocated by this validator

Parameters:
annotation - the integer fingerprint of the name of the type

getAnnotation

protected final SchemaType getAnnotation()
Get the type annotation code to be used on elements validated by this validator

Returns:
the integer fingerprint of the name of the type

setXSIType

public void setXSIType(SchemaType xsiType)
Set the value of the xsi:type attribute. This is called immediately before the call of startElement on which the xsi:type attribute appears.

Parameters:
xsiType - the schema type identified by the xsi:type attribute

setStartTagBuffer

public void setStartTagBuffer(StartTagBufferEE startTag)
Set the StartTagBuffer, which buffers attributes on the element start tag, and also acts as the namespaceResolver to be used for resolving QName-valued attributes

Parameters:
startTag - the namespace resolver

getStartTagBuffer

public StartTagBufferEE getStartTagBuffer()
Get the startTagBuffer

Returns:
the startTagBuffer

getNamespaceResolver

public NamespaceResolver getNamespaceResolver()
Get the namespace resolver

Returns:
the namespace resolver

setNillability

public void setNillability(int nillability)
Set whether this type permits xsi:nil = true

Parameters:
nillability - one of NIL_IGNORED, NIL_ALLOWED, NIL_DISALLOWED

getNillability

public int getNillability()
Determine whether this type permits xsi:nil = true BlockCom

Returns:
one of NIL_IGNORED, NIL_ALLOWED, NIL_DISALLOWED

isNil

public boolean isNil()
Determine whether xsi:nil = true was set on this element

Returns:
true if xsi:nil="true" was set

startElement

public void startElement(NodeName nameCode,
                         SchemaType typeCode,
                         int locationId,
                         int properties)
                  throws XPathException
Handle the start tag for a child element of the element being validated

Specified by:
startElement in interface Receiver
Overrides:
startElement in class ProxyReceiver
Parameters:
nameCode - integer code identifying the name of the element within the name pool.
typeCode - integer code identifying the element's type within the name pool.
locationId - an integer which can be interpreted using a LocationProvider to return information such as line number and system ID. If no location information is available, the value zero is supplied.
properties - properties of the element node
Throws:
XPathException - if an error occurs

makeValidator

public static ContentValidator makeValidator(ElementDecl decl,
                                             int nameCode,
                                             int locationId,
                                             StartTagBufferEE startTagBuffer,
                                             SchemaType governingType,
                                             int validation,
                                             PipelineConfiguration pipe,
                                             Receiver nextReceiver)
                                      throws XPathException
Factory method to make a validator for a particular element

Parameters:
decl - the element declaration to validate against. May be null.
nameCode - the name of the element (used only for diagnostics)
locationId - the location of the element, or of the stylesheet instruction that generated this element (or zero)
startTagBuffer - the start tag buffer holding the attributes of the element to be validated, as required for conditional type assigmment. May be null (not available on all paths)
governingType - the type identified by xsi:type, if specified; otherwise null
validation - the validation mode (strict, lax, preserve, strip)
pipe - the pipeline configuration
nextReceiver - the next receiver in the pipeline
Returns:
a Validator suitable for validating the content of this element
Throws:
XPathException - if a validator cannot be created, for example because neither an element declaration nor a governing type is supplied

getChildValidator

protected abstract ContentValidator getChildValidator()
Get a validator to handle the children of the current element. This is called immediately on return from the startElement call that starts this element.

Returns:
the validator to be used to handle the children

makeValidatorForType

public static ContentValidator makeValidatorForType(ElementDecl elementDecl,
                                                    SchemaType schemaType,
                                                    PipelineConfiguration pipe,
                                                    Receiver nextReceiver)
                                             throws ValidationException
Factory method to create a validator for elements of a given type

Parameters:
elementDecl - the element declaration if available, otherwise null (there will be no element declaration, for example, when doing lax validation against an xsi:type)
schemaType - the simple or complex type against which the content of the element is to be validated
pipe - the pipeline configuration
nextReceiver - the next receiver in the pipeline
Returns:
a Validator that can sit in the event pipeline to perform local validation of elements declared to have this type
Throws:
ValidationException - if a validator cannot be constructed, for example because the requested type is xs:untypedAtomic

endDocument

public void endDocument()
                 throws XPathException
Notify the end of a document node

Specified by:
endDocument in interface Receiver
Overrides:
endDocument in class ProxyReceiver
Throws:
XPathException - if an error occurs


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