You could use "type" substitution, e.g.
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<!-- Some abstract type - it might define some common parts too. It is abstract and cannot be used directly for instance -->
<xs:complexType name="abstractType" abstract="true"/>
<!-- First "children" type of abstract type-->
<xs:complexType name="hostNameType">
<xs:complexContent>
<!-- it is derived from abstractType and adds attribute hostName -->
<xs:extension base="abstractType">
<xs:attribute name="hostName" type="xs:string" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- Second "children" type of abstract type -->
<xs:complexType name="hostAddressType">
<xs:complexContent>
<!-- it is also derived from abstractType and adds attribute hostAddress -->
<xs:extension base="abstractType">
<xs:attribute name="hostAddress" type="xs:string" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- Element of abstractType -->
<xs:element name="webAddress" type="abstractType" />
</xs:schema>
In instance document you have to specify type which is actually used:
<?xml version="1.0" encoding="UTF-8"?>
<!-- by xsi:type you defined which "concrete" type is really used -->
<webAddress xsi:type="hostNameType" hostName="String" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
or
<?xml version="1.0" encoding="UTF-8"?>
<webAddress xsi:type="hostAddressType" hostAddress="xxxx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
But the definition is a bit verbose and also it is not obvious on the first sight what type "webAddress" really could be. But it could be a way for you.