public interface Datatype
Modifier and Type | Field and Description |
---|---|
static int |
ID_TYPE_ID
Indicates that RELAX NG compatibility processors should
treat this datatype as having ID semantics.
|
static int |
ID_TYPE_IDREF
Indicates that RELAX NG compatibility processors should
treat this datatype as having IDREF semantics.
|
static int |
ID_TYPE_IDREFS
Indicates that RELAX NG compatibility processors should
treat this datatype as having IDREFS semantics.
|
static int |
ID_TYPE_NULL
Indicates that the datatype doesn't have ID/IDREF semantics.
|
Modifier and Type | Method and Description |
---|---|
void |
checkValid(String literal,
ValidationContext context)
Similar to the isValid method but throws an exception with diagnosis
in case of errors.
|
DatatypeStreamingValidator |
createStreamingValidator(ValidationContext context)
Creates an instance of a streaming validator for this type.
|
Object |
createValue(String literal,
ValidationContext context)
Converts lexcial value and the current context to the corresponding
value object.
|
int |
getIdType()
Checks if the ID/IDREF semantics is associated with this
datatype.
|
boolean |
isContextDependent()
Checks if this datatype may need a context object for
the validation.
|
boolean |
isValid(String literal,
ValidationContext context)
Checks if the specified 'literal' matches this Datatype
with respect to the current context.
|
boolean |
sameValue(Object value1,
Object value2)
Tests the equality of two value objects which were originally
created by the createValue method of this object.
|
int |
valueHashCode(Object value)
Computes the hash code for a value object,
which is consistent with the sameValue method.
|
static final int ID_TYPE_NULL
getIdType()
method.static final int ID_TYPE_ID
getIdType()
method.static final int ID_TYPE_IDREF
getIdType()
method.static final int ID_TYPE_IDREFS
getIdType()
method.boolean isValid(String literal, ValidationContext context)
literal
- the lexical representation to be checked.context
- If this datatype is context-dependent
(i.e. the isContextDependent()
method returns true),
then the caller must provide a non-null valid context object.
Otherwise, the caller can pass null.void checkValid(String literal, ValidationContext context) throws DatatypeException
If the specified 'literal' is a valid lexical representation for this datatype, then this method must return without throwing any exception. If not, the callee must throw an exception (with diagnosis message, if possible.)
The application can use this method to provide detailed error message to users. This method is kept separate from the isValid method to achieve higher performance during normal validation.
DatatypeException
- If the given literal is invalid, then this exception is thrown.
If the callee supports error diagnosis, then the exception should
contain a diagnosis message.DatatypeStreamingValidator createStreamingValidator(ValidationContext context)
By using streaming validators instead of the isValid method, the caller can avoid keeping the entire string, which is sometimes quite big, in memory.
context
- If this datatype is context-dependent
(i.e. the isContextDependent()
method returns true),
then the caller must provide a non-null valid context object.
Otherwise, the caller can pass null.
The callee may keep a reference to this context object
only while the returned streaming validator is being used.Object createValue(String literal, ValidationContext context)
The caller cannot generally assume that the value object is
a meaningful Java object. For example, the caller cannot expect
this method to return java.lang.Number
type for
the "integer" type of XML Schema Part 2.
Also, the caller cannot assume that the equals method and
the hashCode method of the value object are consistent with
the semantics of the datatype. For that purpose, the sameValue
method and the valueHashCode method have to be used. Note that
this means you cannot use classes like
java.util.Hashtable
to store the value objects.
The returned value object should be used solely for the sameValue and valueHashCode methods.
context
- If this datatype is context-dependent
(when the isContextDependent()
method returns true),
then the caller must provide a non-null valid context object.
Otherwise, the caller can pass null.boolean sameValue(Object value1, Object value2)
int valueHashCode(Object value)
int getIdType()
This method is introduced to support the RELAX NG DTD compatibility spec. (Of course it's always free to use this method for other purposes.)
If you are implementing a datatype library and have no idea about
the "RELAX NG DTD compatibility" thing, just return
ID_TYPE_NULL
is fine.
ID_TYPE_NULL
. If it has such a semantics
(for example, XSD:ID, XSD:IDREF and comp:ID type), then
it returns ID_TYPE_ID
, ID_TYPE_IDREF
or
ID_TYPE_IDREFS
.boolean isContextDependent()
The callee must return true even when the context is not always necessary. (For example, the "QName" type doesn't need a context object when validating unprefixed string. But nonetheless QName must return true.)
XSD's string
and short
types
are examples of context-independent datatypes.
Its QName
and ENTITY
types
are examples of context-dependent datatypes.
When a datatype is context-independent, then
the isValid(java.lang.String, com.sun.tools.rngdatatype.ValidationContext)
method, the checkValid(java.lang.String, com.sun.tools.rngdatatype.ValidationContext)
method,
the createStreamingValidator(com.sun.tools.rngdatatype.ValidationContext)
method and
the createValue(java.lang.String, com.sun.tools.rngdatatype.ValidationContext)
method can be called without
providing a context object.
Copyright © 2021 JBoss by Red Hat. All rights reserved.