使用序列类型
为函数的返回类型或参数类型声明变量时,可以使用序列类型。
关于此任务
在 XML API 中,序列类型是使用 XSequenceType 对象表示的。XSequenceType 对象可以表示一组与 XPath 2.0 中定义的 SequenceType 语法相同的序列类型。通过 XSequenceTypeFactory 接口创建 XSequenceType 对象。您可以使用 XFactory 实例上的 getSequenceTypeFactory() 方法获取 XSequenceTypeFactory 的实例。
过程
示例
方法特征符 | 示例序列类型 | 注释 |
---|---|---|
emptySequence() | empty-sequence() | |
item(OccurrenceIndicator cardinality) | item()* | |
atomic(QName typeName, OccurrenceIndicator cardinality) | xs:integer | “sc:type”是引用用户定义的模式类型的 QName。 |
sc:type+ | ||
documentNode(OccurrenceIndicator cardinality) | document-node()? | |
documentNodeWithElement(QName elementNameOrWildcard, QName typeName, boolean nillable, OccurrenceIndicator cardinality) | document-node(element()) | “ns:elem”是表示元素名称的 QName,“sc:type”是引用用户定义的模式类型的 QName。 elementNameOrWildcard 和 typeName 参数是可选参数;如果元素名称或类型不重要,那么使用 NULL。 |
document-node(element(ns:elem))? | ||
document-node(element(*, sc:type?)) | ||
documentNodeWithSchemaElement(QName elementName, OccurrenceIndicator cardinality) | document-node(schema-element(sc:elemDecl)) | “sc:elemDecl”是引用模式中全局元素声明的 QName。 |
element(QName elementNameOrWildcard, QName typeName, boolean nillable, OccurrenceIndicator cardinality) | element(*) | “ns:elem”是表示元素名称的 QName,“sc:type”是引用用户定义的模式类型的 QName。 elementNameOrWildcard 和 typeName 参数是可选参数;如果元素名称或类型不重要,那么使用 NULL。 |
element(ns:elem, sc:type)* | ||
attribute(QName attributeNameOrWildcard, QName typeName, OccurrenceIndicator cardinality) | attribute()+ | “ns:attrib”是表示属性名称的 QName。 attributeNameOrWildcard 和 typeName 参数是可选参数;如果属性名称或类型不重要,那么使用 NULL。 |
attribute(ns:attrib) | ||
attribute(ns:attrib, xs:string)? | ||
schemaElement(QName elementName, OccurrenceIndicator cardinality) | schema-element(sc:elemDecl)* | “sc:elemDecl”是引用模式中全局元素声明的 QName。 |
schemaAttribute(QName attributeName, OccurrenceIndicator cardinality) | schema-attribute(sc:attribDecl) | “sc:attribDecl”是引用模式中全局属性声明的 QName。 |
processingInstruction(QName piNCName, OccurrenceIndicator cardinality) | processing-instruction()? | “pinst”是表示处理指令的名称的 NCName。 |
processing-instruction("pinst") | ||
processing-instruction(pinst) | ||
comment(OccurrenceIndicator cardinality) | comment() | |
text(OccurrenceIndicator cardinality) | text()+ | |
node(OccurrenceIndicator cardinality) | node()* |
以下示例说明如何创建 XSequenceType 对象以表示各种序列类型。某些结果从模式引用类型和声明。此示例假定模式在 schemaSource 源对象中可用。
// 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>