XML Schema: Can I make some of an attribute's values be required but still allow other values?
- by scrotty
(Note: I cannot change structure of the XML I receive, I am only able to change how I validate it.)
Let's say I can get XML like this:
<Address Field="Street" Value="123 Main"/>
<Address Field="StreetPartTwo" Value="Unit B"/>
<Address Field="State" Value="CO"/>
<Address Field="Zip" Value="80020"/>
<Address Field="SomeOtherCrazyValue" Value="Foo"/>
I need to create an XSD schema that validates that "Street", "State" and "Zip" must be present. But I don't care if "StreetPartTwo" or "SomeOTherCrazyValue" is present.
If I knew that only the three I care about could be included, I could do this:
<xs:element name="Address" type="addressType" maxOccurs="unbounded" minOccurs="3"/>
<xs:complexType name="addressType">
<xs:attribute name="Field" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Street"/>
<xs:enumeration value="State"/>
<xs:enumeration value="Zip"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
But this won't work with my case because I may also receive those other Address elements (that also have "Field" attributes) that I don't care about.
Any ideas how I can ensure the stuff I care about is present but let the other stuff in too?
TIA!
Sean