[英]XML Schema: element attribute as unique value?
I'm making XSD schema to validate my XML file generated from java. 我正在使用XSD模式来验证从Java生成的XML文件。 Its about weather and I want to make
value
inside date
unique. 关于天气,我想使
date
内的value
独一无二。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="forecast">
<xs:complexType>
<xs:sequence>
<xs:element name="city" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="weather">
<xs:complexType>
<xs:sequence>
<xs:element name="date" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="maxtemp">
<xs:simpleType>
<xs:restriction base="xs:int"/>
</xs:simpleType>
</xs:element>
<xs:element name="mintemp" type="xs:int"/>
<xs:element name="cloudcover">
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="humidity">
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="precipitation" type="xs:double"/>
<xs:element name="windspeed">
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="description">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Heavy rain"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:attribute name="value" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\d\d-\d\d-\d\d"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:unique name="dateuq">
<xs:selector xpath="date"/>
<xs:field xpath="@value"/>
</xs:unique>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="zip" use="required">
<xs:simpleType>
<xs:restriction base="xs:positiveInteger">
<xs:totalDigits value="5"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
And here is test XML file: 这是测试XML文件:
<forecast>
<city name="Podgorica" zip="81000">
<weather>
<date value="01-01-14">
<maxtemp>10</maxtemp>
<mintemp>5</mintemp>
<cloudcover>40</cloudcover>
<humidity>20</humidity>
<precipitation>10.2</precipitation>
<windspeed>3</windspeed>
<description>Heavy rain</description>
</date>
<date value="01-01-14">
<maxtemp>10</maxtemp>
<mintemp>5</mintemp>
<cloudcover>40</cloudcover>
<humidity>20</humidity>
<precipitation>10.2</precipitation>
<windspeed>3</windspeed>
<description>Heavy rain</description>
</date>
</weather>
</city>
</forecast>
So this should not be passing validation here because value
should be unique, why this isn't working? 所以这不应该通过验证,因为
value
应该是唯一的,为什么这不起作用?
You placed the uniqueness constraint in date
, but it doesn't make any sense in that context. 您将唯一性约束放置在
date
,但是在那种情况下它没有任何意义。 You can declare an uniqueness constraint for date in the weather
context (or in a higher context such as city
or forecast
. 您可以在
weather
上下文中(或在较高的上下文中,例如city
或forecast
声明日期的唯一性约束。
To guarantee an unique data for each weather
declare it inside the weather
element declaration: 为了保证每种
weather
的唯一数据,请在weather
元素声明中声明:
<xs:element name="weather">
<xs:complexType>
<xs:sequence>
<xs:element name="date" maxOccurs="unbounded">
<xs:complexType>
...
</xs:complexType>
<!-- remove it from here -->
</xs:element>
</xs:sequence>
</xs:complexType>
<!-- and place it here -->
<xs:unique name="dateuq">
<xs:selector xpath="date"/>
<xs:field xpath="@value"/>
</xs:unique>
</xs:element>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.