WedX - журнал о программировании и компьютерных науках

Выбор RelaxNG и регулярное выражение

У меня есть экземпляр XML на основе RelaxNG, который должен разрешать (выбор) align="right", align="left" и align="{ anything here }". Право/лево легко:

 attribute name="align">
   <a:documentation>doc for attrib</a:documentation>
   <choice>
      <value>left</value>
      <a:documentation>doc for left</a:documentation>
      <value>right</value>
      <a:documentation>doc for right</a:documentation>
   </choice>
</attribute>

Но как я могу разрешить пользователю вводить { ... } в качестве альтернативы двум указанным выше значениям?

02.02.2016

Ответы:


1

Вам нужно использовать тип XML-схемы string и установить для него pattern. Вот пример:

<grammar xmlns="https://relaxng.org/ns/structure/1.0"
         datatypeLibrary="https://www.w3.org/2001/XMLSchema-datatypes">
  <start>
    <element name="top">
      <oneOrMore>
        <element name="foo">
          <attribute name="align">
            <choice>
              <value>left</value>
              <value>right</value>
              <data type="string">
                <param name="pattern">\{.+\}</param>
              </data>
            </choice>
          </attribute>
        </element>
      </oneOrMore>
    </element>
  </start>
</grammar>

И тестовый файл:

<top>
  <!-- valid cases -->
  <foo align="{fasf}"></foo>
  <foo align="left"></foo>
  <foo align="right"></foo>
  <!-- invalid cases -->
  <foo align="fasf"></foo>
  <foo align="{}"></foo>
  <foo align="a{c}b"></foo>
</top>

Обратите внимание на комментарии, которые разграничивают допустимые и недопустимые случаи.

Регулярное выражение, которое я использовал, допускает такие вещи, как align="{ab{c}d}". Фигурные скобки допустимы внутри фигурных скобок, которые начинают и заканчивают значение атрибута. Я не вижу причин запрещать это.

02.02.2016
Новые материалы

Как создать диаграмму градиентной кисти с помощью D3.js
Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


Для любых предложений по сайту: [email protected]