Utilisation des types de séquences
Vous pouvez utiliser des types de séquences quand vous déclarez des variables pour les types de paramètres ou de retours des fonctions.
Pourquoi et quand exécuter cette tâche
Dans l'API XML, les types de séquences sont représentés sous la forme d'objets XSequenceType. Les objets XSequenceType peuvent représenter les mêmes types de séquences que la syntaxe SequenceType définie dans XPath 2.0. Vous pouvez créer des objets XSequenceType dans l'interface XSequenceTypeFactory. Vous pouvez obtenir une instance de l'interface XSequenceTypeFactory à l'aide de la méthode getSequenceTypeFactory() sur une instance XFactory.
Procédure
Exemple
Signature de méthode | Exemples de type de séquence | Commentaires |
---|---|---|
emptySequence() | empty-sequence() | |
item(OccurrenceIndicator cardinality) | item()* | |
atomic(QName typeName, OccurrenceIndicator cardinality) | xs:integer | "sc:type" est un QName qui référence un type de schéma défini par l'utilisateur. |
sc:type+ | ||
documentNode(OccurrenceIndicator cardinality) | document-node()? | |
documentNodeWithElement(QName elementNameOrWildcard, QName typeName, boolean nillable, OccurrenceIndicator cardinality) | document-node(element()) | "ns:elem" est un QName
qui représente un nom d'élément, "sc:type" est un QName qui représente un type de schéma défini par l'utilisateur. Les paramètres elementNameOrWildcard et typeName sont facultatifs. Utilisez une valeur nulle si le nom d'élément ou le type sont indifférents. |
document-node(element(ns:elem))? | ||
document-node(element(*, sc:type?)) | ||
documentNodeWithSchemaElement(QName elementName, OccurrenceIndicator cardinality) | document-node(schema-element(sc:elemDecl)) | "sc:elemDecl" est un QName qui référence une déclaration d'élément global dans un schéma. |
element(QName elementNameOrWildcard, QName typeName, boolean nillable, OccurrenceIndicator cardinality) | element(*) | "ns:elem" est un QName
qui représente un nom d'élément, "sc:type" est un QName qui représente un type de schéma défini par l'utilisateur. Les paramètres elementNameOrWildcard et typeName sont facultatifs. Utilisez une valeur nulle si le nom d'élément ou le type sont indifférents. |
element(ns:elem, sc:type)* | ||
attribute(QName attributeNameOrWildcard, QName typeName, OccurrenceIndicator cardinality) | attribute()+ | "ns:attrib" est un QName
qui représente un nom d'attribut. Les paramètres attributeNameOrWildcard et typeName sont facultatifs. Utilisez une valeur nulle si le nom d'attribut ou le type est indifférent. |
attribute(ns:attrib) | ||
attribute(ns:attrib, xs:string)? | ||
schemaElement(QName elementName, OccurrenceIndicator cardinality) | schema-element(sc:elemDecl)* | "sc:elemDecl" est un QName qui référence une déclaration d'élément global dans un schéma. |
schemaAttribute(QName attributeName, OccurrenceIndicator cardinality) | schema-attribute(sc:attribDecl) | "sc:attribDecl" est un QName qui référence une déclaration d'attribut global dans un schéma. |
processingInstruction(QName piNCName, OccurrenceIndicator cardinality) | processing-instruction()? | "pinst" est un NCName qui représente le nom d'une instruction de traitement. |
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>