XSD заставляет использовать определенный порядок для элемента с атрибутом - PullRequest
1 голос
/ 01 марта 2010

У меня есть XML-файл, подобный приведенному ниже

 <transaction name="TEST_EX" type="singletonComplex">
  <vo class="svc.vo.UserProfile">
   <field deepMapping="true">
    <vo class="svc.vo.UserVO">
     <field name="UserName" column="User_Name" type="String"/>
     <field name="Age" column="User_Age" type="Integer"/>
    </vo>
   </field>
   <field name="Address1" column="Address_1" type="String"/>
   <field name="Address2" column="Address_2" type="String"/>
  </vo>
 </transaction>

Внутри есть пара полей. В некоторых полях DeepMapping включен в true. Я хочу убедиться, что, если DeepMapping включен, то он должен быть указан первым, т.е. впереди Address1 и Address2. Я создал файл XSD, но я не уверен, как я могу реализовать это в этом файле XSD.

Ответы [ 3 ]

2 голосов
/ 01 марта 2010

Нельзя сделать содержимое элемента (или атрибута) зависимым от содержимого другого. Схема XML не поддерживает это. Вы должны будете использовать какой-то другой механизм проверки поверх него.

1 голос
/ 01 марта 2010

Можете ли вы изменить структуру XML? Если да, я бы предложил добавить новый элемент XML, чтобы сгруппировать все поля с включенным DeepMapping, например:

 <transaction name="TEST_EX" type="singletonComplex">
  <vo class="svc.vo.UserProfile">
   <deepMapping>
    <vo class="svc.vo.UserVO">
     <field name="UserName" column="User_Name" type="String"/>
     <field name="Age" column="User_Age" type="Integer"/>
    </vo>
   </deepMapping>
   <field name="Address1" column="Address_1" type="String"/>
   <field name="Address2" column="Address_2" type="String"/>
  </vo>
 </transaction>

Ваш запрос поместить все поля с DeepMapping = "true" вверху - это более или менее группировка полей.

0 голосов
/ 01 марта 2010

Как сказал xcut, вы не можете сделать это с помощью XML Schema. Что вы можете сделать, это использовать два разных имени элемента с одинаковым сложным типом:

 <xs:complexType name="fieldType">
    <xs:sequence>
      <xs:element name="field" maxOccurs="unbounded">
        <!--  .... -->
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="vo">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="deepMappedField" type="fieldType" minOccurs="0"/>
        <xs:element name="field" type="fieldType" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...