Да, есть альтернативный способ ..
Это определить каждый объект как ComplexType дать ему имя, и использовать в качестве TYPE:)
здесь ур пример XML и XSD
XML:
<request>
<amenity>
<description>text</description>
</amenity>
</request>
XSD
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="request" type="request"/>
<xs:complexType name="request">
<xs:sequence>
<xs:element name="amenity" type="amenity"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="amenity">
<xs:sequence>
<xs:element name="description" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
Несколько больше объяснений:
предположим, что ваш XML выглядит так:
<?xml version="1.0" encoding="utf-8"?>
<request>
<amenity>
<description>text</description>
<foo>text</foo>
</amenity>
<foobar>
<amenity2>
<description>text2</description>
<foo>text3</foo>
</amenity2>
</foobar>
</request>
Ваш XSD будет действительно проще .. потому что вы не должны определить <descirption/>
и <foo/>
теги два раза :)
Наблюдайте за тем, что я использую Type="General"
несколько раз :)
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="request" type="request"/>
<xs:complexType name="request">
<xs:sequence>
<xs:element name="amenity" type="General"/>
<xs:element name="foobar" type="foobar"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="General">
<xs:sequence>
<xs:element name="description" type="xs:string" />
<xs:element name="foo" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="foobar">
<xs:sequence>
<xs:element name="amenity2" type="General"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
это не выглядит слишком плохо для меня, так как в целом XSD имеет тенденцию быть многословным. Мой совет. Не меняйте его, если он работает. –
Это примерно так же просто, как XML Schema получает .... – skaffman
Вы можете использовать ' ' вместо ' '. В вашем случае это не имело бы значения, и вы безопасно 20 общих персонажей ;-) –