我目前正在研究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>
如果我使用id得到了正确的话你能告诉我吗?如何在id中创建1000到2000的范围?我在想它的minOccurs和maxOccurs,但这不可能是正确的? maxOccurence是可能的最大“出现”属性,而不是范围,对吧?并且我使用了mimOccurence =“1”,因为每个人必须只有1个身份?
使用我的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>
提前谢谢
答案 0 :(得分:0)
将
id
定义为1000到2000范围内的正整数。
使用xsd:minInclusive
或xsd: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"/>
请注意,由于minOccurs
and maxOccurs
are 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}" />
答案 1 :(得分:0)
也许你需要多做一些阅读?
对于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]
。