如何在xsd和xsd限制中定义范围

  • 本文关键字:xsd 定义 范围 xml xsd
  • 更新时间 :
  • 英文 :


我目前正在学习xml、xsd和xsl我有一个问题,我需要将一个id定义为1000到2000范围内的正整数。属性是必需的,并且每个人只能有一个id。

这是xml

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<?xml-stylesheet type="text/xsl" href="items.xsl" ?>
<sales>
<sale>
<id>1027</id>
<firstName>Elaine</firstName>
<lastName>Conner</lastName>
<street>Ap #177-657 Pede Avenue</street>
<city>Miller</city>
<postCode>2143</postCode>
<salesQuantity>100</salesQuantity>
<productId>p101</productId>
</sale>
<sale>
<id>1105</id>
<firstName>Shelby</firstName>
<lastName>Hinton</lastName>
<street>P.O. Box 551, 5296 Penatibus Rd</street>
<city>Granville</city>
<postCode>2142</postCode>
<salesQuantity>75</salesQuantity>
<productId>p201</productId>
</sale>
<sale>
<id>1122</id>
<firstName>Bryar</firstName>
<lastName>Weiss</lastName>
<street>P.O. Box 511, 5053 Ac Avenue</street>
<city>Campsie</city>
<postCode>2153</postCode>
<salesQuantity>150</salesQuantity>
<productId>p105</productId>
</sale>
<sale>
<id>1037</id>
<firstName>Slade</firstName>
<lastName>Haynes</lastName>
<street>593-252 Nullam Rd</street>
<city>Lidcombe</city>
<postCode>2145</postCode>
<salesQuantity>100</salesQuantity>
<productId>p101</productId>
</sale>
</sales>
  1. 你能告诉我id是否正确吗?我如何在id中创建1000到2000的范围??我想是minOccurs和maxOccurs,但这不可能是对的??maxOccurrence是可能的最大"occurrence"属性,而不是范围,对吧?我使用mimOccurrence="1",因为每个人必须只有一个id??

  2. 对于我的productId,我必须用4个字母数字字符设置限制。模式中的值必须是大写字符,后跟3个数字。你能确认一下我做得是否正确吗?

这是我正在处理的xsd。

<?xml version = "1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="sales">
<xs:complexType>
<xs:sequence>
<xs:element name="sale" type="mySale" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="mySale">
<xs:sequence>
<xs:element name="id" type="xs:positiveInteger" minOccurs="1" use="required" />
<xs:element name="firstName" type="xs:string" use="required" />
<xs:element name="lastName" type="xs:string" use="required" />
<xs:element name="street" type="xs:string" />
<xs:element name="city" type="xs:string" />
<xs:element name="postCode" type="xs:positiveInteger" use="required" />
<xs:element name="salesQuantity" type="xs:integer" />
<xs:element name="productId">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z0-90-90-9]{4}" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>

提前感谢

id定义为1000到2000之间的正整数。

使用xsd:minInclusivexsd:maxInclusive:

<xsd:simpleType name="Id1000to2000Type">
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="1000"/>
<xsd:maxInclusive value="2000"/>
</xsd:restriction>
</xsd:simpleType>

该属性是必需的,并且每个人只能有一个id

小心。在XML中,属性表示非常具体的内容;id元素

<xsd:element name="id" minOccurs="1" maxOccurs="1" type="Id1000to2000Type"/>

请注意,由于minOccursmaxOccurs的默认值为1,因此您可以在上面的声明中省略它们。

对于我的productId,我必须用4个字母数字字符设置限制。模式中的值必须是大写字符,后跟3个数字。你能确认一下我做得是否正确吗?

<xs:pattern value="[A-Z0-90-90-9]{4}" />

不,您的模式将允许大写字母在数字之间混合出现,并且不需要出现大写字母。除了{4}之外,您也不应该重复0-9范围。

相反,使用以下约束的等效表达式之一:

<xs:pattern value="[A-Z][0-9][0-9][0-9]" />
<xs:pattern value="[A-Z][0-9]{3}" />
<xs:pattern value="[A-Z]d{3}" />

也许你需要多读一点?

对于id属性,将其类型定义为用户定义的类型,该类型是通过限制从xs:integer派生的,具有两个方面:minInclusive和maxInclusive

<xs:simpleType name="IdType">
<xs:restriction base="xs:integer">
<xs:minInclusive value="1000"/>
<xs:maxInclusive value="2000"/>
</xs:restriction>
</xs:simpleType>

对于productId,您想要的模式是[A-Z][0-9][0-9][0-9]

最新更新