我正在研究一个模块,通过读取xsd文件来生成动态表单。首先,我需要找到所有必需/可选元素及其字段限制和数据类型。在Schema中,可以有可以引用其他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中获取列名。
答案 0 :(得分:0)
所以我的问题是如何从我拥有的xsds中获取列名 包括在内。
您需要以与读取和处理根XSD相同的方式读取和处理包含的XSD,并且您需要递归执行此操作,因为包含的XSD可能还包含其他XSD。
但是,我建议你评估在你的表格努力中支持XSD中所有可能的结构所涉及的工作量。除了xsd:include
之外,还要意识到任意XSD也可能使用:
xsd:import
xsd:extension
/ xsd:restriction
substitutionGroup
也许你已经在处理这些问题了,但是对于相对简单的xsd:include
声明的处理提出质疑表明可能会有更大的复杂性等待着你。
两个建议: