2010-03-11 3 views
2

Я пытаюсь написать XML-схему, чтобы охватить ряд условий XML, с которыми я могу столкнуться. У меня есть один и тот же корневой элемент (serviceRequest) с разными дочерними элементами. Я пытался использовать элемент xs: extension для определения нескольких версий, но он жалуется на неожиданный элемент orderInclusionCriteria и т. Д.XSD-схема для XML с несколькими структурами

Я собираюсь сделать это правильно, или есть лучший способ определить это?

Другим способом я подумал об этом, чтобы иметь единственный выбор xs: со всеми вариантами внутри него, но это казалось несколько неэлегантным.

Эти файлы XSD предназначены для использования в XMLBeans, если это имеет значение.

Я Учитывая следующие 2 примера XML:

1)

<?xml version="1.0" encoding="utf-8"?> 
<serviceRequest method="GOO" debug="NO"> 
    <sessionId sID="ABC1234567" /> 
    <orderInclusionCriteria accountId="1234567" accountNum="1234567890" /> 
</serviceRequest> 

2)

<?xml version="1.0" encoding="utf-8"?> 
<serviceRequest method="GOO" debug="NO"> 
    <sessionId sID="ABC1234567" /> 
    <action aType='MakePayment'> 
     <makePayment accountID='CH91015165S' amount='5.00' /> 
    </action> 
</serviceRequest> 

Я думал, что я мог бы использовать следующий файл схемы:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="serviceRequest" type="ServiceRequestType" /> 
    <xs:element name="session" type="SessionType" /> 

    <xs:attribute name="method" type="xs:string" /> 
    <xs:attribute name="debug" type="xs:string" /> 

    <xs:complexType name="SessionType"> 
     <xs:attribute name="sID" use="required"> 
      <xs:simpleType> 
       <xs:restriction base="xs:string"/> 
      </xs:simpleType> 
     </xs:attribute> 
    </xs:complexType> 

    <xs:complexType name="ServiceRequestType"> 
     <xs:sequence> 
      <xs:element ref="session" /> 
     </xs:sequence> 
     <xs:attribute ref="method" /> 
     <xs:attribute ref="debug" />   
    </xs:complexType> 

    <xs:complexType name="OrderTrackingServiceRequest"> 
     <xs:complexContent> 
      <xs:extension base="ServiceRequestType"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="OrderInclusionCriteria" type="xs:string" /> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 

    <xs:complexType name="Action"> 
     <xs:complexContent> 
      <xs:extension base="ServiceRequestType"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="makePayment"> 
          <xs:complexType> 
           <xs:attribute name="accountID" type="xs:string" /> 
           <xs:attribute name="amount" type="xs:string" /> 
          <xs:complexType> 
         </xs:element> 
        </xs:sequence> 
        <xs:attribute name="aType" type="xs:string" /> 
       </xs:complexType> 
      </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 
</xs:schema> 

ответ

0

попробуйте использовать minOccurs = "0" для элементов, которые вы не хотите присутствовать. Думаю, таким образом вы можете решить свою проблему с версиями. Также xs: выбор может работать в вашем случае

Смежные вопросы