public class XSDHandler extends java.lang.Object implements FormatStructureHandler
XSDHandler
class parses an XML Schema definition document and creates the structure information.
Input must be set using any of the addSchema
methods. The method build
must be called after adding the required schema documents. This method initialises the member variables and sets up the object for use. Otherwise, all the helper methods return null
.
A lookup table of all the global elements against its namespace is maintained as AccessorDef
objects. The method getType
may be used to obtain an element by name and namespace.
We then build a list of all the top-level elements in buildElementSet
. The method buildSchemaTree
descends into the top-level elements and creates a tree representing the schema's structure.
The getXSDTree
method returns the tree representation of the input schema document/s.
On the resolution of each global element, it is added to a lookup table of elements against its namespace. This allows the method getType
to quickly lookup a type by name and namespace and return its AccessorDef
representation. The member variable mTypesSet
encloses the lookup table against each namespace declared in the schema document.
The tree structure is in accordance with JSR227 specification. An item of data (<element>
) is represented by a StructureDef
. The <element>
's attributes can be obtained calling StructureDef
's getAttribute
method. If the <element>
has child elements, they can be obtained by calling the getAccessors
method. This returns a container of AccessorDef
objects. It's getStructure
method returns a StructureDef
which represents the parent's child element. XML specific information against <element>
such as maxOccurs
, nillable
and other such Annotations and Facets can be obtained by calling AttributeDef
'sgetProperty
or getProperties
method.
The leaf children of a complex type or a top level element node is being added as an attribute against the enclosing element in the structureDefinition. To distinguish between leaf element and attribute, a prpoerty (LEAFELEMENT_HINT,'value') is added to the attribute for leaf element. Example 1: <xs:element name="company"> <xs:complexType> <xs:sequence> <xs:element name="dept" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> Here: element:dept is treated as an attribute of element: company. A property(LEAFELEMENT_HINT,LEAFELEMENT_NO_ATTRIBUTE) is added for the attribute:dept. Example 2: <xs:element name="company"> <xs:complexType> <xs:sequence> <xs:element name="dept" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="no" type="xs:int" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> For this usecase, a structureDef is created for element:dept with two attributes: no and _text. Text node for element dept is represented as an attribute _text. A property (LEAFELEMENT_HINT,LEAFELEMENT_WITH_ATTRIBUTE) is added for the accessor definition of element dept.
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
ARRAY_ITEM |
static java.lang.String |
ENUMERATION |
static java.lang.String |
LEAFELEMENT_DATA |
static java.lang.String |
MAX_OCCURS |
static java.lang.String |
MIN_OCCURS |
static java.lang.String |
NAMESPACE |
static java.lang.String |
NILLABLE |
static java.lang.String |
TYPE
A set of constants that are retrieved from a type and stored in its 'properties'.
|
Constructor and Description |
---|
XSDHandler() |
XSDHandler(java.lang.String rootName)
Initialises the XML Data Structure with a name.
|
Modifier and Type | Method and Description |
---|---|
void |
addSchema(java.io.InputStream xsdStream)
Add a schema definition specified by its InputStream to the pipeline.
|
void |
addSchema(Node node)
Add a schema defintion specified by the
Node . |
void |
addSchema(java.io.Reader xsdReader)
Add a schema defintion specified by its Reader to the pipeline.
|
void |
addSchema(java.lang.String xsdLocation)
Add a schema defintion specified by its URL location to the pipeline.
|
void |
addSchema(java.net.URL xsdURL)
Add a schema defintion specified by its URL to the pipeline.
|
void |
build()
Builds the object and initialises the member variables for use.
|
java.lang.String |
getSchemaProperty(java.lang.String targetNamespace, java.lang.String name)
Returns the property value of the schema given its namespace and name.
|
StructureDefinition |
getSchemaTree()
Returns the XSD tree in the form of
StructureDefinition . |
StructureDefinition |
getStructure(java.lang.String name, DefinitionContext ctx)
Returns the structure definition extracted for the data format.
|
java.util.List |
getTopLevelElements()
Returns an
List of the top-level elements in all the namespaces defined in this schema. |
java.lang.Object |
getType(java.lang.String namespace, java.lang.String typeName)
Returns the
AccessorDef or a AttributeDef representation of a type given its namespace. |
boolean |
isAttributeFormDefault(java.lang.String targetNamespace)
Determines if the attributes in the given namespace is qualified.
|
boolean |
isElementFormDefault(java.lang.String targetNamespace)
Determines if the elements in the given namespace is qualified.
|
boolean |
isNamespaceDefined(java.lang.String namespace)
Determines if the given namespace is defined in the current schema.
|
boolean |
isValidRootElemExist()
Check whether root element exist in the schema.
|
static void |
main(java.lang.String[] args) |
void |
printAllTypes() |
void |
printProperties(java.util.Map props, java.lang.String padding) |
void |
printSchemaMetadata() |
void |
printTree(StructureDefinition struct, int indent) |
void |
setNormalized(boolean normalized)
Deprecated.
|
void |
setRootBindingPath(java.lang.String path)
Sets the root bind path.
|
void |
setRootElementName(java.lang.String rootElemName)
Sets the root element name.
|
public static final java.lang.String TYPE
public static final java.lang.String ENUMERATION
public static final java.lang.String MIN_OCCURS
public static final java.lang.String MAX_OCCURS
public static final java.lang.String NILLABLE
public static final java.lang.String NAMESPACE
public static final java.lang.String LEAFELEMENT_DATA
public static final java.lang.String ARRAY_ITEM
public XSDHandler()
public XSDHandler(java.lang.String rootName)
rootName
- Name for the XML data structurepublic void setRootElementName(java.lang.String rootElemName)
rootElemName
- root element name.public void addSchema(java.lang.String xsdLocation) throws AdapterException
xsdLocation
- URL location of the schema defintion.AdapterException
- If error occurs while adding this defintion to the list. The URL location might be invalid or inaccessible.public void addSchema(java.net.URL xsdURL) throws AdapterException
xsdURL
- URL of the schema definition.AdapterException
- If error occus while adding this definition to the list. The URL might be invalid or inaccessible.public void addSchema(java.io.Reader xsdReader)
xsdReader
- Reader
object containing the schema definition.public void addSchema(java.io.InputStream xsdStream)
xsdStream
- InputStream
object containing the schema definition.public void addSchema(Node node)
Node
.node
- Root node of the schema defintion.public void setRootBindingPath(java.lang.String path)
path
- root binding.public void build() throws AdapterException
This method must be called after setting up the input using any of the addSchema
methods and before calling any of the helper methods.
AdapterException
- If error occurs while parsing the schema.public StructureDefinition getSchemaTree()
StructureDefinition
.StructureDefinition
object representing the structure of top-level elements of the XML Schema document.public java.lang.Object getType(java.lang.String namespace, java.lang.String typeName)
AccessorDef
or a AttributeDef
representation of a type given its namespace. To obtain the underlying data structure of a AccessorDef
, call it's getStructure
method.namespace
- Namespace to which the type
belongs.typeName
- Name of the type
.AccessorDef
or a AttributeDef
object if the type
is found, otherwise returns null
.public boolean isElementFormDefault(java.lang.String targetNamespace)
targetNamespace
- Namespace whose property needs to be queried.true
if the elements in the given namespace are qualified. Returns false
if the elements are unqualified or the given namespace does not exist.public boolean isAttributeFormDefault(java.lang.String targetNamespace)
targetNamespace
- Namespace whose property needs to be queried.true
if the attributes in the given namespace are qualified. Returns false
if the attributes are unqualified or the given namespace does not exist.public java.lang.String getSchemaProperty(java.lang.String targetNamespace, java.lang.String name)
targetNamespace
- Namespace whose property needs to be queried.name
- Name of the property whose value is to be fetched.null
.public boolean isNamespaceDefined(java.lang.String namespace)
namespace
- Name of the namespace.true
if this namespace is defined in this schema, otherwise returns false
.public StructureDefinition getStructure(java.lang.String name, DefinitionContext ctx)
getStructure
in interface FormatStructureHandler
name
- name of the root structure.ctx
- definition context information.public java.util.List getTopLevelElements()
List
of the top-level elements in all the namespaces defined in this schema.List
of the top-level elements.public void setNormalized(boolean normalized)
normalized
- boolean variable which helps if the structure name should use different column namepublic void printTree(StructureDefinition struct, int indent)
public void printProperties(java.util.Map props, java.lang.String padding)
public void printAllTypes()
public void printSchemaMetadata()
public static void main(java.lang.String[] args)
public boolean isValidRootElemExist()
addSchema
method.