如何在XSD中使用枚举和模式?

发布于 2025-01-23 10:03:42 字数 2285 浏览 0 评论 0 原文

问题是请求以下内容。手机应具有具有3个列出家庭,单元和工作值的属性类型。手机还应仅限于(###)### - ####的电话格式。 您如何将枚举阀的属性结合在一起并应用受限模式? XML示例:

<donor level="founder">
    <name>David Brennan</name>
    <address>5133 Oak Street
             Windermere, FL  34786</address>
    <phone type="home">(407) 555-8981</phone>
    <phone type="cell">(407) 555-8189</phone>
    <email>[email protected]</email>
    <donation>50000.00</donation>
    <method>Phone</method>
    <effectiveDate>1982-09-01</effectiveDate>
</donor>

XSD代码我到目前为止的电话:

<xs:attribute name="type" type="pType" />

<xs:simpleType name="phoneType">
    <xs:restriction base="xs:string">
        <xs:pattern value="\(\d{3}\)\s\d{3}-\d{4}" />
    </xs:restriction>
</xs:simpleType>
    
<xs:element name="phone">
    <xs:complexType>  
        <xs:simpleContent>
            <xs:extension base ="xs:string">
                <xs:attribute ref="type" use="required"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element>

<xs:simpleType name="pType">
    <xs:restriction base="xs:string">
        <xs:enumeration value="home" />
        <xs:enumeration value="cell" />
        <xs:enumeration value="work" />
    </xs:restriction>
</xs:simpleType>

<xs:element name="donor">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="name"/>
            <xs:element ref="address"/>
            <xs:element ref="phone" minOccurs="1" maxOccurs="unbounded"/>
            <xs:element ref="email" minOccurs="0" />
            <xs:element ref="donation" />
            <xs:element ref="method" />
            <xs:element ref="effectiveDate" />
        </xs:sequence>
        <xs:attribute ref="level" />
    </xs:complexType>
</xs:element>

The problem is requesting the following. That the phone should have the attribute type with 3 enumerated values of home, cell, and work. AND the phone should also be restricted to a phone format of (###) ###-####.
How do you combine the attribute for enumerated vales AND apply a restricted pattern?
XML example:

<donor level="founder">
    <name>David Brennan</name>
    <address>5133 Oak Street
             Windermere, FL  34786</address>
    <phone type="home">(407) 555-8981</phone>
    <phone type="cell">(407) 555-8189</phone>
    <email>[email protected]</email>
    <donation>50000.00</donation>
    <method>Phone</method>
    <effectiveDate>1982-09-01</effectiveDate>
</donor>

xsd code I have so far for phone:

<xs:attribute name="type" type="pType" />

<xs:simpleType name="phoneType">
    <xs:restriction base="xs:string">
        <xs:pattern value="\(\d{3}\)\s\d{3}-\d{4}" />
    </xs:restriction>
</xs:simpleType>
    
<xs:element name="phone">
    <xs:complexType>  
        <xs:simpleContent>
            <xs:extension base ="xs:string">
                <xs:attribute ref="type" use="required"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element>

<xs:simpleType name="pType">
    <xs:restriction base="xs:string">
        <xs:enumeration value="home" />
        <xs:enumeration value="cell" />
        <xs:enumeration value="work" />
    </xs:restriction>
</xs:simpleType>

<xs:element name="donor">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="name"/>
            <xs:element ref="address"/>
            <xs:element ref="phone" minOccurs="1" maxOccurs="unbounded"/>
            <xs:element ref="email" minOccurs="0" />
            <xs:element ref="donation" />
            <xs:element ref="method" />
            <xs:element ref="effectiveDate" />
        </xs:sequence>
        <xs:attribute ref="level" />
    </xs:complexType>
</xs:element>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

天暗了我发光 2025-01-30 10:03:42

您的代码几乎是正确的。但是您错过了 phoneType 在元素类型分配中的定义:只需更改( base )类型&lt; xs:Extension base =“ XS:String) “&gt; 使您的电话元素定义

<xs:element name="phone">
    <xs:complexType>  
      <xs:simpleContent>
        <xs:extension base ="phoneType">
          <xs:attribute ref="type" use="required"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
</xs:element>

现在所有内容都应根据需要工作,而您的Regex定义应限制字符串值。

Your code is almost correct. But you missed to use the phoneType definition in your element's type assignment: just change the (base)type in <xs:extension base ="xs:string"> making your phone element definition

<xs:element name="phone">
    <xs:complexType>  
      <xs:simpleContent>
        <xs:extension base ="phoneType">
          <xs:attribute ref="type" use="required"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
</xs:element>

Now everything should work as desired and your RegEx definition should restrict the string values.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文