Is it possible to make a restriction in XSD document to other element value. For example, I have country and state elements. And if country is equal USA then I need to restrict state element value for specified enumeration otherwise state can be just a fixed length string. Example of current XSD which is restrict state to enumeration all the time:
<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>
Thanks for any advice!
Unfortunately no, XML Schema does not provide support for this. However, something like Schematron could help you here.
Source
Looks like a element value validation will not be possible on other element input value.