Ограничение XSD для другого значения элемента

Можно ли сделать ограничение в документе XSD на другое значение элемента. Например, у меня есть элементы страны и штата. И если страна равна США, мне нужно ограничить значение элемента состояния для указанного перечисления, иначе состояние может быть просто строкой фиксированной длины. Пример текущего XSD, который постоянно ограничивает перечисление:

<xsd:simpleType name="country">
    <xsd:restriction base="xsd:string">
        <xsd:enumeration value="ABW"/>
        <xsd:enumeration value="AFG"/>
        <xsd:enumeration value="AGO"/>
        <xsd:enumeration value="AIA"/>
        <xsd:enumeration value="ALA"/>
        <xsd:enumeration value="ALB"/>
        <xsd:enumeration value="AND"/>
        <xsd:enumeration value="ANT"/>
        <xsd:enumeration value="ARE"/>
        <xsd:enumeration value="ARG"/>
        <xsd:enumeration value="ARM"/>
        <xsd:enumeration value="ASM"/>
        <xsd:enumeration value="ATA"/>
        <xsd:enumeration value="ATF"/>
        <xsd:enumeration value="ATG"/>
        <xsd:enumeration value="AUS"/>
        <xsd:enumeration value="AUT"/>
        <xsd:enumeration value="AZE"/>
        <xsd:enumeration value="BDI"/>
        <xsd:enumeration value="BEL"/>
        <xsd:enumeration value="BEN"/>
        <xsd:enumeration value="BFA"/>
        <xsd:enumeration value="BGD"/>
        <xsd:enumeration value="BGR"/>
        <xsd:enumeration value="BHR"/>
        <xsd:enumeration value="BHS"/>
        <xsd:enumeration value="BIH"/>
        <xsd:enumeration value="BLM"/>
        <xsd:enumeration value="BLR"/>
        <xsd:enumeration value="BLZ"/>
        <xsd:enumeration value="BMU"/>
        <xsd:enumeration value="BOL"/>
        <xsd:enumeration value="BRA"/>
        <xsd:enumeration value="BRB"/>
        <xsd:enumeration value="BRN"/>
        <xsd:enumeration value="BTN"/>
        <xsd:enumeration value="BVT"/>
        <xsd:enumeration value="BWA"/>
        <xsd:enumeration value="CAF"/>
        <xsd:enumeration value="CAN"/>
        <xsd:enumeration value="CCK"/>
        <xsd:enumeration value="CHE"/>
        <xsd:enumeration value="CHL"/>
        <xsd:enumeration value="CHN"/>
        <xsd:enumeration value="CIV"/>
        <xsd:enumeration value="CMR"/>
        <xsd:enumeration value="COD"/>
        <xsd:enumeration value="COG"/>
        <xsd:enumeration value="COK"/>
        <xsd:enumeration value="COL"/>
        <xsd:enumeration value="COM"/>
        <xsd:enumeration value="CPV"/>
        <xsd:enumeration value="CRI"/>
        <xsd:enumeration value="CUB"/>
        <xsd:enumeration value="CXR"/>
        <xsd:enumeration value="CYM"/>
        <xsd:enumeration value="CYP"/>
        <xsd:enumeration value="CZE"/>
        <xsd:enumeration value="DEU"/>
        <xsd:enumeration value="DJI"/>
        <xsd:enumeration value="DMA"/>
        <xsd:enumeration value="DNK"/>
        <xsd:enumeration value="DOM"/>
        <xsd:enumeration value="DZA"/>
        <xsd:enumeration value="ECU"/>
        <xsd:enumeration value="EGY"/>
        <xsd:enumeration value="ENG"/>
        <xsd:enumeration value="ERI"/>
        <xsd:enumeration value="ESH"/>
        <xsd:enumeration value="ESP"/>
        <xsd:enumeration value="EST"/>
        <xsd:enumeration value="ETH"/>
        <xsd:enumeration value="FIN"/>
        <xsd:enumeration value="FJI"/>
        <xsd:enumeration value="FLK"/>
        <xsd:enumeration value="FRA"/>
        <xsd:enumeration value="FRO"/>
        <xsd:enumeration value="FSM"/>
        <xsd:enumeration value="GAB"/>
        <xsd:enumeration value="GBR"/>
        <xsd:enumeration value="GEO"/>
        <xsd:enumeration value="GGY"/>
        <xsd:enumeration value="GHA"/>
        <xsd:enumeration value="GIB"/>
        <xsd:enumeration value="GIN"/>
        <xsd:enumeration value="GLP"/>
        <xsd:enumeration value="GMB"/>
        <xsd:enumeration value="GNB"/>
        <xsd:enumeration value="GNQ"/>
        <xsd:enumeration value="GRC"/>
        <xsd:enumeration value="GRD"/>
        <xsd:enumeration value="GRL"/>
        <xsd:enumeration value="GTM"/>
        <xsd:enumeration value="GUF"/>
        <xsd:enumeration value="GUM"/>
        <xsd:enumeration value="GUY"/>
        <xsd:enumeration value="HKG"/>
        <xsd:enumeration value="HMD"/>
        <xsd:enumeration value="HND"/>
        <xsd:enumeration value="HRV"/>
        <xsd:enumeration value="HTI"/>
        <xsd:enumeration value="HUN"/>
        <xsd:enumeration value="IDN"/>
        <xsd:enumeration value="IMN"/>
        <xsd:enumeration value="IND"/>
        <xsd:enumeration value="IOT"/>
        <xsd:enumeration value="IRL"/>
        <xsd:enumeration value="IRN"/>
        <xsd:enumeration value="IRQ"/>
        <xsd:enumeration value="ISL"/>
        <xsd:enumeration value="ISR"/>
        <xsd:enumeration value="ITA"/>
        <xsd:enumeration value="JAM"/>
        <xsd:enumeration value="JEY"/>
        <xsd:enumeration value="JOR"/>
        <xsd:enumeration value="JPN"/>
        <xsd:enumeration value="KAZ"/>
        <xsd:enumeration value="KEN"/>
        <xsd:enumeration value="KGZ"/>
        <xsd:enumeration value="KHM"/>
        <xsd:enumeration value="KIR"/>
        <xsd:enumeration value="KNA"/>
        <xsd:enumeration value="KOR"/>
        <xsd:enumeration value="KOS"/>
        <xsd:enumeration value="KWT"/>
        <xsd:enumeration value="LAO"/>
        <xsd:enumeration value="LBN"/>
        <xsd:enumeration value="LBR"/>
        <xsd:enumeration value="LBY"/>
        <xsd:enumeration value="LCA"/>
        <xsd:enumeration value="LIE"/>
        <xsd:enumeration value="LKA"/>
        <xsd:enumeration value="LSO"/>
        <xsd:enumeration value="LTU"/>
        <xsd:enumeration value="LUX"/>
        <xsd:enumeration value="LVA"/>
        <xsd:enumeration value="MAC"/>
        <xsd:enumeration value="MAF"/>
        <xsd:enumeration value="MAR"/>
        <xsd:enumeration value="MCO"/>
        <xsd:enumeration value="MDA"/>
        <xsd:enumeration value="MDG"/>
        <xsd:enumeration value="MDV"/>
        <xsd:enumeration value="MEX"/>
        <xsd:enumeration value="MHL"/>
        <xsd:enumeration value="MKD"/>
        <xsd:enumeration value="MLI"/>
        <xsd:enumeration value="MLT"/>
        <xsd:enumeration value="MMR"/>
        <xsd:enumeration value="MNE"/>
        <xsd:enumeration value="MNG"/>
        <xsd:enumeration value="MNP"/>
        <xsd:enumeration value="MOZ"/>
        <xsd:enumeration value="MRT"/>
        <xsd:enumeration value="MSR"/>
        <xsd:enumeration value="MTQ"/>
        <xsd:enumeration value="MUS"/>
        <xsd:enumeration value="MWI"/>
        <xsd:enumeration value="MYS"/>
        <xsd:enumeration value="MYT"/>
        <xsd:enumeration value="NAM"/>
        <xsd:enumeration value="NAP"/>
        <xsd:enumeration value="NCL"/>
        <xsd:enumeration value="NER"/>
        <xsd:enumeration value="NFK"/>
        <xsd:enumeration value="NGA"/>
        <xsd:enumeration value="NIC"/>
        <xsd:enumeration value="NIR"/>
        <xsd:enumeration value="NIU"/>
        <xsd:enumeration value="NLD"/>
        <xsd:enumeration value="NOR"/>
        <xsd:enumeration value="NPL"/>
        <xsd:enumeration value="NRE"/>
        <xsd:enumeration value="NRU"/>
        <xsd:enumeration value="NZL"/>
        <xsd:enumeration value="OMN"/>
        <xsd:enumeration value="PAK"/>
        <xsd:enumeration value="PAN"/>
        <xsd:enumeration value="PCN"/>
        <xsd:enumeration value="PER"/>
        <xsd:enumeration value="PHL"/>
        <xsd:enumeration value="PLW"/>
        <xsd:enumeration value="PNG"/>
        <xsd:enumeration value="POL"/>
        <xsd:enumeration value="PRI"/>
        <xsd:enumeration value="PRK"/>
        <xsd:enumeration value="PRT"/>
        <xsd:enumeration value="PRY"/>
        <xsd:enumeration value="PSE"/>
        <xsd:enumeration value="PYF"/>
        <xsd:enumeration value="QAT"/>
        <xsd:enumeration value="REU"/>
        <xsd:enumeration value="ROU"/>
        <xsd:enumeration value="RUS"/>
        <xsd:enumeration value="RWA"/>
        <xsd:enumeration value="SAU"/>
        <xsd:enumeration value="SCT"/>
        <xsd:enumeration value="SDN"/>
        <xsd:enumeration value="SEN"/>
        <xsd:enumeration value="SGP"/>
        <xsd:enumeration value="SGS"/>
        <xsd:enumeration value="SHN"/>
        <xsd:enumeration value="SJM"/>
        <xsd:enumeration value="SLB"/>
        <xsd:enumeration value="SLE"/>
        <xsd:enumeration value="SLV"/>
        <xsd:enumeration value="SMR"/>
        <xsd:enumeration value="SOM"/>
        <xsd:enumeration value="SPM"/>
        <xsd:enumeration value="SRB"/>
        <xsd:enumeration value="STP"/>
        <xsd:enumeration value="SUR"/>
        <xsd:enumeration value="SVK"/>
        <xsd:enumeration value="SVN"/>
        <xsd:enumeration value="SWE"/>
        <xsd:enumeration value="SWZ"/>
        <xsd:enumeration value="SYC"/>
        <xsd:enumeration value="SYR"/>
        <xsd:enumeration value="TCA"/>
        <xsd:enumeration value="TCD"/>
        <xsd:enumeration value="TGO"/>
        <xsd:enumeration value="THA"/>
        <xsd:enumeration value="TJK"/>
        <xsd:enumeration value="TKL"/>
        <xsd:enumeration value="TKM"/>
        <xsd:enumeration value="TLS"/>
        <xsd:enumeration value="TON"/>
        <xsd:enumeration value="TTO"/>
        <xsd:enumeration value="TUN"/>
        <xsd:enumeration value="TUR"/>
        <xsd:enumeration value="TUV"/>
        <xsd:enumeration value="TWN"/>
        <xsd:enumeration value="TZA"/>
        <xsd:enumeration value="UGA"/>
        <xsd:enumeration value="UKR"/>
        <xsd:enumeration value="UMI"/>
        <xsd:enumeration value="URY"/>
        <xsd:enumeration value="USA"/>
        <xsd:enumeration value="UZB"/>
        <xsd:enumeration value="VAT"/>
        <xsd:enumeration value="VCT"/>
        <xsd:enumeration value="VEN"/>
        <xsd:enumeration value="VGB"/>
        <xsd:enumeration value="VIR"/>
        <xsd:enumeration value="VNM"/>
        <xsd:enumeration value="VUT"/>
        <xsd:enumeration value="WAL"/>
        <xsd:enumeration value="WLF"/>
        <xsd:enumeration value="WSM"/>
        <xsd:enumeration value="YEM"/>
        <xsd:enumeration value="YUG"/>
        <xsd:enumeration value="ZAF"/>
        <xsd:enumeration value="ZMB"/>
        <xsd:enumeration value="ZWE"/>
        <xsd:enumeration value=""/>
    </xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="state">
    <xsd:restriction base="xsd:string">
        <xsd:enumeration value="AB"/>
        <xsd:enumeration value="AL"/>
        <xsd:enumeration value="AK"/>
        <xsd:enumeration value="AS"/>
        <xsd:enumeration value="AZ"/>
        <xsd:enumeration value="AR"/>
        <xsd:enumeration value="BC"/>
        <xsd:enumeration value="CA"/>
        <xsd:enumeration value="CO"/>
        <xsd:enumeration value="CT"/>
        <xsd:enumeration value="DE"/>
        <xsd:enumeration value="FL"/>
        <xsd:enumeration value="GA"/>
        <xsd:enumeration value="GU"/>
        <xsd:enumeration value="HI"/>
        <xsd:enumeration value="ID"/>
        <xsd:enumeration value="IL"/>
        <xsd:enumeration value="IN"/>
        <xsd:enumeration value="IA"/>
        <xsd:enumeration value="KS"/>
        <xsd:enumeration value="KY"/>
        <xsd:enumeration value="LA"/>
        <xsd:enumeration value="ME"/>
        <xsd:enumeration value="MH"/>
        <xsd:enumeration value="MD"/>
        <xsd:enumeration value="MA"/>
        <xsd:enumeration value="MB"/>
        <xsd:enumeration value="MI"/>
        <xsd:enumeration value="MN"/>
        <xsd:enumeration value="MS"/>
        <xsd:enumeration value="MO"/>
        <xsd:enumeration value="MT"/>
        <xsd:enumeration value="NB"/>
        <xsd:enumeration value="NE"/>
        <xsd:enumeration value="NV"/>
        <xsd:enumeration value="NH"/>
        <xsd:enumeration value="NJ"/>
        <xsd:enumeration value="NL"/>
        <xsd:enumeration value="NM"/>
        <xsd:enumeration value="NY"/>
        <xsd:enumeration value="NC"/>
        <xsd:enumeration value="ND"/>
        <xsd:enumeration value="NS"/>
        <xsd:enumeration value="MP"/>
        <xsd:enumeration value="OH"/>
        <xsd:enumeration value="OK"/>
        <xsd:enumeration value="ON"/>
        <xsd:enumeration value="OR"/>
        <xsd:enumeration value="PA"/>
        <xsd:enumeration value="PE"/>
        <xsd:enumeration value="PR"/>
        <xsd:enumeration value="PW"/>
        <xsd:enumeration value="QC"/>
        <xsd:enumeration value="RI"/>
        <xsd:enumeration value="SC"/>
        <xsd:enumeration value="SD"/>
        <xsd:enumeration value="SK"/>
        <xsd:enumeration value="TN"/>
        <xsd:enumeration value="TX"/>
        <xsd:enumeration value="UT"/>
        <xsd:enumeration value="VT"/>
        <xsd:enumeration value="VI"/>
        <xsd:enumeration value="VA"/>
        <xsd:enumeration value="WA"/>
        <xsd:enumeration value="WV"/>
        <xsd:enumeration value="WI"/>
        <xsd:enumeration value="WY"/>
        <xsd:enumeration value=""/>
    </xsd:restriction>
</xsd:simpleType> 

Спасибо за любой совет!


person Alex Kleshchevnikov    schedule 10.05.2011    source источник


Ответы (2)



Источник
Похоже, что проверка значения элемента будет невозможна для другого входного значения элемента.

person Kanagavelu Sugumar    schedule 19.10.2012

К сожалению, нет, XML-схема не поддерживает это. Однако здесь вам может помочь что-то вроде Schematron.

person Petru Gardea    schedule 20.08.2011