XML Schema: element attribute as unique value? -
XML Schema: element attribute as unique value? -
i'm making xsd schema validate xml file generated java. weather , want create value within date unique.
<?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 test xml file:
<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 should not passing validation here because value should unique, why isn't working?
you placed uniqueness constraint in date, doesn't create sense in context. can declare uniqueness constraint date in weather context (or in higher context such city or forecast.
to guarantee unique info each weather declare within weather element declaration:
<xs:element name="weather"> <xs:complextype> <xs:sequence> <xs:element name="date" maxoccurs="unbounded"> <xs:complextype> ... </xs:complextype> <!-- remove here --> </xs:element> </xs:sequence> </xs:complextype> <!-- , place here --> <xs:unique name="dateuq"> <xs:selector xpath="date"/> <xs:field xpath="@value"/> </xs:unique> </xs:element> xml unique altova spy
Comments
Post a Comment