加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml – 如何在xsd:enumeration中使用任何字符串

发布时间:2020-12-16 23:48:51 所属栏目:百科 来源:网络整理
导读:我有这样的xsd类型 xsd:simpleType name="carsEnum" xsd:restriction base="xsd:string" xsd:enumeration value="Seat"/ xsd:enumeration value="Opel"/ /xsd:restriction/xsd:simpleType 现在我可以这样使用它 – xsd:attribute name =“carModel”type =
我有这样的xsd类型
<xsd:simpleType name="carsEnum">
    <xsd:restriction base="xsd:string">
        <xsd:enumeration value="Seat"/>
        <xsd:enumeration value="Opel"/>
    </xsd:restriction>
</xsd:simpleType>

现在我可以这样使用它 – < xsd:attribute name =“carModel”type =“carsEnum”/>

我如何重建carEnum以使用任何其他字符串?

举个例子 –

< ... carModel="Seat"/>
< ... carModel="Some string"/>
< ... carModel="Opel"/>

因为我可以像往常一样制作类型carsEnum String,但是在IDE Idea中使用这样的构造相当舒服,因为它显示了工具提示.

如果我总结一下你的问题我理解的是你想要维护一个元素汽车的可能值列表,也想接受出现在有界列表之外的任何值.这可以使用UNION在XSD中实现.我用下面的例子说明了它.

示例XML:

<?xml version="1.0" encoding="utf-8"?>
<cars>ssd</cars>

XSD:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="cars" type="carsType"/>
  <xs:simpleType name="carsType">
    <xs:union memberTypes="carsEnum carsAnyString"/>
  </xs:simpleType>
  <xs:simpleType name="carsEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Seat"/>
      <xs:enumeration value="Opel"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="carsAnyString">
    <xs:restriction base="xs:string"/>
  </xs:simpleType>
</xs:schema>

在上面的XSD中,我使用CAR的多个定义,一次作为枚举列表,一次作为任何字符串.定义组合这两者的UNION类型将是汽车的类型.

所以<汽车可以有如下价值:
Seat,Opel,anyOtherCar,AnyString2 ..

我还想提一种控制ANY STRING价值的方法. XSD以上可以接受任何字符串甚至是特殊的字符和数字.我们可以通过仅将限制模式添加到Alpha字符来限制此操作.以下是XSD代码:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="cars" type="carsType"/>
  <xs:simpleType name="carsType">
    <xs:union memberTypes="carsEnum carsAnyAlphaString"/>
  </xs:simpleType>
  <xs:simpleType name="carsEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Seat"/>
      <xs:enumeration value="Opel"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="carsAnyAlphaString">
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-Za-z]*"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

所以可能的值可以是Seat,“任何字符串但没有数字”,“任何字符串但没有特殊字符”

更换

`<xs:pattern value="[A-Za-z]*"/>`

通过

<xs:pattern value="[A-Za-z]+"/>

不允许空字符串.
这是一种重新定义元素的方法..不仅仅是坚持枚举列表.

现在你的模式也有枚举列表.希望能帮助到你.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读