Sequenztypen verwenden
Wenn Sie Variablen für Rückgaben oder Parametertypen von Funktionen deklarieren, können Sie Sequenztypen verwenden.
Informationen zu diesem Vorgang
In der API XML werden Sequenztypen mit XSequenceType-Objekten dargestellt. XSequenceType-Objekte können dieselben Sequenztypen wie die in XPath 2.o definierte SequenceType-Syntax repräsentieren. XSequenceType-Objekte werden mithilfe des Interface XSequenceTypeFactory erstellt. Mit der Methode getSequenceTypeFactory() für eine XFactory-Instanz können Sie eine Instanz von XSequenceTypeFactory anfordern.
Vorgehensweise
Beispiel
Methodensignatur | Beispiele für Sequenztypen | Kommentare |
---|---|---|
emptySequence() | empty-sequence() | |
item(OccurrenceIndicator cardinality) | item()* | |
atomic(QName typeName, OccurrenceIndicator cardinality) | xs:integer | "sc:type" ist ein QName, der auf einen benutzerdefinierten Schematyp verweist. |
sc:type+ | ||
documentNode(OccurrenceIndicator cardinality) | document-node()? | |
documentNodeWithElement(QName elementNameOrWildcard, QName typeName, boolean nillable, OccurrenceIndicator cardinality) | document-node(element()) | "ns:elem" ist ein QName, der einen Elementnamen repräsentiert, und "sc:type" ist ein QName, der auf einen benutzerdefinierten
Schematyp verweist. Die Parameter elementNameOrWildcard und typeName sind optional. Wenn der Elementname oder -typ keine Rolle spielt, können Sie null verwenden. |
document-node(element(ns:elem))? | ||
document-node(element(*, sc:type?)) | ||
documentNodeWithSchemaElement(QName elementName, OccurrenceIndicator cardinality) | document-node(schema-element(sc:elemDecl)) | "sc:elemDecl" ist ein QName, die auf eine globale Elementdeklaration in einem Schema verweist. |
element(QName elementNameOrWildcard, QName typeName, boolean nillable, OccurrenceIndicator cardinality) | element(*) | "ns:elem" ist ein QName, der einen Elementnamen repräsentiert, und "sc:type" ist ein QName, der auf einen benutzerdefinierten
Schematyp verweist. Die Parameter elementNameOrWildcard und typeName sind optional. Wenn der Elementname oder -typ keine Rolle spielt, können Sie null verwenden. |
element(ns:elem, sc:type)* | ||
attribute(QName attributeNameOrWildcard, QName typeName, OccurrenceIndicator cardinality) | attribute()+ | "ns:attrib" ist ein QName, der einen Attributnamen
repräsentiert. Die Parameter attributeNameOrWildcard und typeName sind optional. Wenn der Attributname oder -typ keine Rolle spielt, können Sie null verwenden. |
attribute(ns:attrib) | ||
attribute(ns:attrib, xs:string)? | ||
schemaElement(QName elementName, OccurrenceIndicator cardinality) | schema-element(sc:elemDecl)* | "sc:elemDecl" ist ein QName, die auf eine globale Elementdeklaration in einem Schema verweist. |
schemaAttribute(QName attributeName, OccurrenceIndicator cardinality) | schema-attribute(sc:attribDecl) | "sc:attribDecl" ist ein QName, der auf eine globale Attributdeklaration in einem Schema verweist. |
processingInstruction(QName piNCName, OccurrenceIndicator cardinality) | processing-instruction()? | "pinst" ist ein NCName, der den Namen einer Verarbeitungsanweisung repräsentiert. |
processing-instruction("pinst") | ||
processing-instruction(pinst) | ||
comment(OccurrenceIndicator cardinality) | comment() | |
text(OccurrenceIndicator cardinality) | text()+ | |
node(OccurrenceIndicator cardinality) | node()* |
// Factory erstellen
XFactory factory = XFactory.newInstance();
// Instanz von XSeqeuenceTypeFactory anfordern
XSequenceTypeFactory stFactory = factory.getSequenceTypeFactory();
// Sequenztyp für eine Sequenz von xs:integer-Werten, "xs:integer*", erstellen
XSequenceType integerSequenceType = stFactory.atomic(
XTypeConstants.INTEGER_QNAME,
XSequenceType.OccurrenceIndicator.ZERO_OR_MORE);
// Sequenztyp für einen einzelnen Knoten, "node()", erstellen
XSequenceType nodeType = stFactory.node(OccurrenceIndicator.ONE);
// Konstante für den Zielnamespace eines Schemas mit benutzerdefinierten Typen und Deklarationen definieren
final String targetNamespace = "http://www.example.org/schema/";
// Schema in der XFactory registrieren
factory.registerSchema(schemaSource);
// Sequenztyp für genau einen Dokumentknoten mit einem Element des Typs "employeeRecord" aus dem Schema
// "document-node(element(*, ns:employeeRecord))" erstellen
XSequenceType employeeRecordDocumentType = stFactory.documentNodeWithElement(
null,
new QName(targetNamespace, "employeeRecord"),
false,
XSequenceType.OccurrenceIndicator.ONE);
// Sequenztyp für ein optionales Attribut erstellen, das mit der Attributdeklaration "type" im Schema
// "schema-attribute(ns:type)?" übereinstimmt
XSequenceType optionalEmployeeType = stFactory.schemaAttribute(
new QName(targetNamespace, "type"),
XSequenceType.OccurrenceIndicator.ZERO_OR_ONE);
// Sequenztyp für mindestens einen atomaren Wert des Typs "telephoneNumber" aus dem Schema
// "ns:telephoneNumber+" erstellen
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>