gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 01:47:12 29 4
gpt4 key购买 nike

我有这样的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 中使用这样的构造相当舒服,因为它显示工具提示。

最佳答案

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

示例 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 类型,将是 type用于汽车。

所以 <cars可以有如下值:Seat, Opel, anyOtherCar, AnyString2 ..

我还想提一种控制ANY STRING值的方法.以上 XSD 可以接受任何字符串,甚至是特殊字符和数字。我们可以通过添加 restriction pattern 来限制它仅 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, Opel, "Any string but no Number", "Any string but no special char"

替换

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

通过

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

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

现在你有了枚举列表的模式。希望对您有所帮助。

关于xml - 如何在 xsd :enumeration 中使用任何字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14353926/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com