Utilización de tipos de secuencia
Puede utilizar tipos de secuencia cuando declare variables para su devolución o tipos de parámetros de funciones.
Acerca de esta tarea
En la API XML, los tipos de secuencia se representan utilizando objetos XSequenceType. Los objetos XSequenceType pueden representar el mismo conjunto de tipos de secuencia igual que la sintaxis de SequenceType definida en XPath 2.0. Los objetos XSequenceType se crean a través de la interfaz XSequenceTypeFactory. Puede obtener una instancia de XSequenceTypeFactory utilizando el método getSequenceTypeFactory() en una instancia XFactory.
Procedimiento
Ejemplo
Firma de método | Tipos de secuencia de ejemplo | Comentarios |
---|---|---|
emptySequence() | empty-sequence() | |
item(OccurrenceIndicator cardinality) | item()* | |
atomic(QName typeName, OccurrenceIndicator cardinality) | xs:integer | "sc:type" es un QName que hace referencia al tipo de esquema definido por el usuario. |
sc:type+ | ||
documentNode(OccurrenceIndicator cardinality) | document-node()? | |
documentNodeWithElement(QName elementNameOrWildcard, QName typeName, boolean nillable, OccurrenceIndicator cardinality) | document-node(element()) | "ns:elem" es un QName que representa un nombre de elemento y
"sc:type" es un QName que hace referencia a un tipo de esquema definido por el usuario. Los parámetros elementNameOrWildcard y typeName son opcionales; utilizan null si el nombre o tipo de elemento no importan. |
document-node(element(ns:elem))? | ||
document-node(element(*, sc:type?)) | ||
documentNodeWithSchemaElement(QName elementName, OccurrenceIndicator cardinality) | document-node(schema-element(sc:elemDecl)) | "sc:elemDecl" es un QName que hace referencia a una declaración de elementos global en un esquema. |
element(QName elementNameOrWildcard, QName typeName, boolean nillable, OccurrenceIndicator cardinality) | element(*) | "ns:elem" es un QName que representa un nombre de elemento y
"sc:type" es un QName que hace referencia a un tipo de esquema definido por el usuario. Los parámetros elementNameOrWildcard y typeName son opcionales; utilizan null si el nombre o tipo de elemento no importan. |
element(ns:elem, sc:type)* | ||
attribute(QName attributeNameOrWildcard, QName typeName, OccurrenceIndicator cardinality) | attribute()+ | "ns:attrib" es un QName que representa un nombre de atributo. Los parámetros attributeNameOrWildcard y typeName son opcionales; utilice null si el nombre o el tipo de atributo no importan. |
attribute(ns:attrib) | ||
attribute(ns:attrib, xs:string)? | ||
schemaElement(QName elementName, OccurrenceIndicator cardinality) | schema-element(sc:elemDecl)* | "sc:elemDecl" es un QName que hace referencia a una declaración de elementos global en un esquema. |
schemaAttribute(QName attributeName, OccurrenceIndicator cardinality) | schema-attribute(sc:attribDecl) | "sc:attribDecl" es un QName que hace referencia a una declaración de atributos global en un esquema. |
processingInstruction(QName piNCName, OccurrenceIndicator cardinality) | processing-instruction()? | "pinst" es un NCName que representa el nombre de una instrucción de proceso. |
processing-instruction("pinst") | ||
processing-instruction(pinst) | ||
comment(OccurrenceIndicator cardinality) | comment() | |
text(OccurrenceIndicator cardinality) | text()+ | |
node(OccurrenceIndicator cardinality) | node()* |
// Create the factory
XFactory factory = XFactory.newInstance();
// Obtain an XSeqeuenceTypeFactory instance
XSequenceTypeFactory stFactory = factory.getSequenceTypeFactory();
// Create a sequence type for a sequence of xs:integer values: "xs:integer*"
XSequenceType integerSequenceType = stFactory.atomic(
XTypeConstants.INTEGER_QNAME,
XSequenceType.OccurrenceIndicator.ZERO_OR_MORE);
// Create a sequence type for a single node: "node()"
XSequenceType nodeType = stFactory.node(OccurrenceIndicator.ONE);
// Define a constant for the target namespace of a schema containing user-defined types and declarations
final String targetNamespace = "http://www.example.org/schema/";
// Register the schema with the XFactory
factory.registerSchema(schemaSource);
// Create a sequence type for exactly one document node with an element of type "employeeRecord" from the schema:
// "document-node(element(*, ns:employeeRecord))"
XSequenceType employeeRecordDocumentType = stFactory.documentNodeWithElement(
null,
new QName(targetNamespace, "employeeRecord"),
false,
XSequenceType.OccurrenceIndicator.ONE);
// Create a sequence type for an optional attribute matching the attribute declaration "type" in the schema:
// "schema-attribute(ns:type)?"
XSequenceType optionalEmployeeType = stFactory.schemaAttribute(
new QName(targetNamespace, "type"),
XSequenceType.OccurrenceIndicator.ZERO_OR_ONE);
// Create a sequence type for one or more atomic values of type "telephoneNumber" from the schema:
// "ns:telephoneNumber+"
XSequenceType telephoneNumbersType = stFactory.atomic(
new QName(targetNamespace, "telephoneNumber"),
XSequenceType.OccurrenceIndicator.ONE_OR_MORE);
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ns="http://www.example.org/schema/" targetNamespace="http://www.example.org/schema/">
<complexType name="employeeRecord">
<sequence>
<element name="name" type="string"></element>
<element name="id" type="int"></element>
<element name="telephone" type="ns:telephoneNumber"></element>
</sequence>
<attribute ref="ns:type"></attribute>
</complexType>
<simpleType name="telephoneNumber">
<restriction base="string">
<pattern value="\d{3}-\d{3}-\d{4}"></pattern>
</restriction>
</simpleType>
<element name="employee" type="ns:employeeRecord"></element>
<simpleType name="employeeType">
<restriction base="string">
<enumeration value="full-time"></enumeration>
<enumeration value="part-time"></enumeration>
<enumeration value="seasonal"></enumeration>
</restriction>
</simpleType>
<attribute name="type" type="ns:employeeType"></attribute>
</schema>