【发布时间】:2013-12-01 16:51:32
【问题描述】:
我正在开发一个通过读取 xsd 文件来生成动态表单的模块。首先,我需要找到所有必需/可选元素以及它们的字段限制和数据类型。在架构中可以有可以引用其他 xsd 文件的元素。我不确定如何处理这种情况。到目前为止,我能够从 xsd 文件中获取简单类型的元素,但是当 xsd 可以具有引用不同 xsd 文件的复杂元素时,我无法找到一种方法来处理这种情况。下面是我正在工作的 xsd 文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://edd.att.com/cnmeddservice" targetNamespace="http://edd.att.com/cnmeddservice" elementFormDefault="qualified">
<xsd:include schemaLocation="EDD_DataTypes.xsd"/>
<xsd:include schemaLocation="EDD_Internal_DataTypes.xsd"/>
<xsd:element name="RET_MAIL">
<xsd:annotation>
<xsd:documentation>Represents the eddbdsbatch request for RET_MAIL</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="AccountNumber">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="15"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="cType">
<xsd:simpleType>
<xsd:restriction base="CtypeType">
<xsd:enumeration value="RET_MAIL"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="RequestId">
<xsd:simpleType>
<xsd:restriction base="xsd:integer">
<xsd:pattern value="[0-9]{1,9}"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="BillingId" minOccurs="0">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="12"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="BillingRegion" minOccurs="0">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="S"/>
<xsd:enumeration value="P"/>
<xsd:enumeration value="B"/>
<xsd:enumeration value="A"/>
<xsd:enumeration value="N"/>
<xsd:enumeration value="W"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="BillIndicator" minOccurs="0">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="LS"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="EmailAddress" minOccurs="0">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="75"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="AccountBalance" minOccurs="0">
<xsd:simpleType>
<xsd:restriction base="DecimalAmountType">
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="BillAmount" minOccurs="0">
<xsd:simpleType>
<xsd:restriction base="DecimalAmountType">
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="DateLastchecked" minOccurs="0">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="((0[1-9]|1[012])/(0[1-9]|[12][0-9]|3[01])/(19|20)\d\d) ((0[0-9]|1[0-9]|2[0-4]):([0-5][0-9]):([0-5][0-9]))"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="PaymentDueDate" minOccurs="0">
<xsd:simpleType>
<xsd:restriction base="DateType"/>
</xsd:simpleType>
</xsd:element>
<xsd:element name="ctn">
<xsd:simpleType>
<xsd:restriction base="ContactNumberType">
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="AlternateCTN" minOccurs="0">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="10"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="AltPhoneExtension" minOccurs="0">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="4"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="CustomerType">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="R"/>
<xsd:enumeration value="B"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="clientIndicator" use="required">
<xsd:simpleType>
<xsd:restriction base="ClientIndicatorType">
<xsd:enumeration value="Wireless_BDS"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="OverridePriorityString" use="optional">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="E"/>
<xsd:enumeration value="A"/>
<xsd:enumeration value="S"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="Languageid" use="optional">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="EN"/>
<xsd:enumeration value="ES"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:schema>
在上面的 xsd 中,我包含了两个不同的 xsds 文件(EDD_INTERNAL_DATATYPES 和 EDD_DATATYPES)。现在假设我有一个元素,它可以是一个包含 2-3 个元素的表格。现在在我的主要 xsd 文件中,我将有我的表名和列名的引用,我将在我包含的第二个 xsd 文件中给出。 所以我的问题是如何从我包含的 xsds 中获取列名。
【问题讨论】:
标签: java xml-parsing xsd