2012-02-05 4 views
0

У меня есть этот XSD для проверки входящих запросов на мой API:Можно ли переписать этот XSD более простым способом?

<?xml version="1.0"?> 
<xs:schema version="1.0" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      elementFormDefault="qualified"> 
    <xs:element name="request"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="amenity"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="description" type="xs:string" /> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

Но, кажется, своего рода суматоху. Слишком много вложенных элементов и т. Д. Можно ли переписать его более простым, менее запутанным способом?

+1

это не выглядит слишком плохо для меня, так как в целом XSD имеет тенденцию быть многословным. Мой совет. Не меняйте его, если он работает. –

+3

Это примерно так же просто, как XML Schema получает .... – skaffman

+0

Вы можете использовать '' вместо ''. В вашем случае это не имело бы значения, и вы безопасно 20 общих персонажей ;-) –

ответ

1

Если вы не хотите, чтобы он был настолько глубоко вложенным, вы можете изменить сложные типы, называемые типами, а затем ссылаться на них по имени из объявлений элементов. Это имеет преимущества в том, что типы могут быть повторно использованы. Но это не будет делать эту простую схему любой проще ...

0

Да, есть альтернативный способ ..

Это определить каждый объект как 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> 
Смежные вопросы