XSD restriction on other element value

2019-07-18 03:41发布

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!

2条回答
你好瞎i
2楼-- · 2019-07-18 04:19

Unfortunately no, XML Schema does not provide support for this. However, something like Schematron could help you here.

查看更多
Anthone
3楼-- · 2019-07-18 04:33


Source
Looks like a element value validation will not be possible on other element input value.

查看更多
登录 后发表回答