There is a convoluted way using choice
to create choices where only valid combinations are allowed...
In you example this should have the desired result:
<xs:complexType name="Address">
<xs:choice>
<xs:sequence>
<xs:element name="city"/>
<xs:element name="street"/>
<xs:element name="state"/>
</xs:sequence>
<xs:sequence>
<xs:element name="street"/>
<xs:element name="postcode"/>
</xs:sequence>
</xs:choice>
</xs:complexType>
Another simple example if you want to allow any two from three.. you could do this, say you have elements A B C and you want to allow any two from three you could use the following xsd:
<xs:complexType name="anyTwo">
<xs:choice>
<xs:sequence>
<xs:element name="A"/>
<xs:element name="B"/>
</xs:sequence>
<xs:sequence>
<xs:element name="A"/>
<xs:element name="C"/>
</xs:sequence>
<xs:sequence>
<xs:element name="B"/>
<xs:element name="C"/>
</xs:sequence>
</xs:choice>
</xs:complexType>
You can see that this would soon become unwieldy for large sets but the principal does work!
Edit: see also this answer