当前位置 : 主页 > 网页制作 > xml >

xsd – 如何在XML模式中创建可重用的“US State”类型?

来源:互联网 收集:自由互联 发布时间:2021-06-13
我有一个包含多个地址的 XML架构: xs:element name="personal_address" maxOccurs="1" !-- address fields go here --/xs:elementxs:element name="business_address" maxOccurs="1" !-- address fields go here --/xs:element 在每个地址元
我有一个包含多个地址的 XML架构:

<xs:element name="personal_address" maxOccurs="1">
  <!-- address fields go here -->
</xs:element>
<xs:element name="business_address" maxOccurs="1">
  <!-- address fields go here -->
</xs:element>

在每个地址元素中,我包含一个“美国州”枚举:

<xs:simpleType name="state">
    <xs:restriction base="xs:string">
        <xs:enumeration value="AL" />
        <xs:enumeration value="AK" />
        <xs:enumeration value="AS" />
                ....
            <xs:enumeration value="WY" />
        </xs:restriction>
</xs:simpleType>

如何编写“US State”枚举一次并在每个地址元素中重复使用它?如果这是一个n00b问题我提前道歉 – 我以前从未写过XSD.

我最初的尝试是:

<xs:element name="business_address" maxOccurs="1">
  <!-- address fields go here -->
  <xs:element name="business_address_state" type="state" maxOccurs="1"></xs:element>
</xs:element>
我想你是在正确的轨道上.我认为它更多地与XML命名空间有关.请尝试以下方法:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.org/foo"
    xmlns:tns="http://www.example.org/foo"
    elementFormDefault="qualified">
    <xs:element name="business_address">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="business_address_state"
                    type="tns:state" maxOccurs="1" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:simpleType name="state">
        <xs:restriction base="xs:string">
            <xs:enumeration value="AL" />
            <xs:enumeration value="AK" />
            <xs:enumeration value="AS" />
            <xs:enumeration value="WY" />
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

请注意,类型是tns:state不仅仅是state

然后这就是你如何使用它:

<?xml version="1.0" encoding="UTF-8"?>
<business_address xmlns="http://www.example.org/foo"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.example.org/foo foo.xsd ">
    <business_address_state>AL</business_address_state>
</business_address>

请注意,此XML使用的默认命名空间与XSD的targetNamespace相同

网友评论