На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ANDLL
  
> XSD, проверить, что есть определенный элемент.
    Пусть есть вот такая xml:
    ExpandedWrap disabled
       <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
         <mechanism>X-OAUTH2</mechanism>
         <mechanism>X-GOOGLE-TOKEN</mechanism>
         <mechanism>PLAIN</mechanism>
       </mechanisms>

    Требуется, чтобы она проходила валидацию только если присутствует элемент <mechanism>PLAIN</mechanism> именно с контентом "PLAIN".
    Вот что у меня пока есть:
    ExpandedWrap disabled
      <xs:schema
             xmlns:xs='http://www.w3.org/2001/XMLSchema'
             targetNamespace='urn:ietf:params:xml:ns:xmpp-sasl'
             xmlns='urn:ietf:params:xml:ns:xmpp-sasl'
             elementFormDefault='qualified'>
        <xs:element name='mechanisms'>
          <xs:complexType>
            <xs:all>
              <xs:element ref='mechanism' minOccurs='1' maxOccurs='1'/>
            </xs:all>
          </xs:complexType>
        </xs:element>
        <xs:element name="mechanism">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:pattern value="PLAIN" />
          </xs:restriction>
        </xs:simpleType>
        </xs:element>
      </xs:schema>

    Но, естественно, оно не валидирует xml, в котором есть елементы с другим контентом.
    Вообще возможно ли сделать то, что я желаю?
      ИМХО, всё, что можно сделать это:
      ExpandedWrap disabled
        <?xml version="1.0" encoding="windows-1251"?>
        <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
                   targetNamespace="urn:ietf:params:xml:ns:xmpp-sasl" xmlns:xs="http://www.w3.org/2001/XMLSchema">
          <xs:element name="mechanisms">
            <xs:complexType>
              <xs:sequence>
                <xs:element maxOccurs="unbounded" name="mechanism">
                  <xs:simpleType>
                    <xs:restriction base="xs:string">
                      <xs:pattern value="PLAIN|.{1,}"/>
                    </xs:restriction>
                  </xs:simpleType>
                </xs:element>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:schema>

      Ваша схема не валидирует xml возможно еще и потому, что в xml-файле несколько элементов <mechanism>, в то время как в схеме указано maxOccurs='1' и элемент взят в тэг <xs:all>, что не допускает повторения вхождения элемента более одного раза.
      Ну проверка наличия какого-то определенного значения элемента, на мой взгляд, задача не схемы, а алгоритма работы с файлом.
      Регулярное выражение проверяет на соответствие один элемент, проверить все вхождения скопом не получится.
      Хотя, может, я что не так понял. Тогда извиняйте. :)
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0186 ]   [ 16 queries used ]   [ Generated: 28.03.24, 16:18 GMT ]