Используйте регулярное выражение в названии элемента XSD -- regex поле с участием xml поле с участием xsd пол Связанный проблема

Use regular expression in XSD element name


2
vote

проблема

русский

Я пытаюсь реализовать XSD для моего XML-кода.

 <код>     </transition>     <!--The list of automata-->     <Machine0/>     <Machine1/>     <Machine2/>     <Machine3/>   </automaton> </structure>   

Проблема с Machine[i] , количество элементов Machine[i] изменяется в каждом файле xml.

Я пробовал с этим кодом, но не работает:

 <код> -0  
Английский оригинал

I'm trying to implement a XSD for my XML code.

    </transition>     <!--The list of automata-->     <Machine0/>     <Machine1/>     <Machine2/>     <Machine3/>   </automaton> </structure> 

The problem is with the Machine[i], the number of Machine[i] elements changes in each XML file.

I've tried with this code, but doesn't seem to work:

<xs:complexType>     <xs:sequence>         <xs:any minOccurs="1" maxOccurs="unbounded"/>     </xs:sequence>     <xs:assertion test="every $x in *       satisfies matches(local-name($x), 'Machine[0-9]+')"/> </xs:complexType>  
</div
        
   
   

Список ответов

1
 
vote

Первый, несколько примечаний:

  1. Самое главное , если у вас все еще есть дизайн-контроль над именем Machine элементов, реализуйте, что вы должны иметь очень хорошую причину для уничтожения от превосходного Шаблон дизайна, где позиция элемента подразумевается, а не явно представлена ​​в названии элемента. Мне нравится <код> xs:assert , поэтому я не люблю никого, что дает члены XSD WG Причины сожаления о его включении в XSD 1.1 . ; -)
  2. Это <код> xs:assert , а не <код> xs:assertion (общий опечатки).

  3. Вы захотите закрепить начало и конец вашего Regex. (В отличие от <код> xs:pattern , <код> fn:matches() не закрепляет начало и конец его шаблона.

  4. Вам понадобится <код> processContents="lax" или <код> ="skip" , если вы не собираетесь определить <код> MachineN элементов.


XSD 1.1

 <код> <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"     xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"     elementFormDefault="qualified"     vc:minVersion="1.1">      <xs:element name="r" type="rType"/>      <xs:complexType name="rType">         <xs:sequence>             <xs:any minOccurs="1" maxOccurs="unbounded" processContents="lax"/>         </xs:sequence>         <xs:assert test="every $x in * satisfies                           matches(local-name($x), '^Machine[0-9]+$')"/>     </xs:complexType>  </xs:schema>   

Тогда этот xml

Допустимый случай # 0

 <код> xs:assert0  

будет действительным на ваш xsd, но эти документы XML,

Неверный случай # 1

 <код> xs:assert1  

неверный случай # 2

 <код> xs:assert2  

<Сильный> Неверный чехол # 3

 <код> xs:assert3  

будет недействительным , как запрашивается.

 

First, a few notes:

  1. Most importantly, if you still have design control over the naming of the Machine elements, do realize that you ought to have a very good reason for straying from the superior design pattern where element position is implied rather than represented explicitly in an element's name. I like xs:assert, so I don't like anyone giving the XSD WG members reasons to regret its inclusion in XSD 1.1. ;-)
  2. It's xs:assert, not xs:assertion (common typo).

  3. You'll want to anchor the start and end of your regex. (Unlike with xs:pattern, fn:matches() does not automatically anchor the start and end of its pattern.

  4. You'll need processContents="lax" or ="skip" unless you intend to define MachineN elements explicitly.


XSD 1.1

<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"     xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"     elementFormDefault="qualified"     vc:minVersion="1.1">      <xs:element name="r" type="rType"/>      <xs:complexType name="rType">         <xs:sequence>             <xs:any minOccurs="1" maxOccurs="unbounded" processContents="lax"/>         </xs:sequence>         <xs:assert test="every $x in * satisfies                           matches(local-name($x), '^Machine[0-9]+$')"/>     </xs:complexType>  </xs:schema> 

Then, this XML

Valid case #0

<?xml version="1.0" encoding="UTF-8"?> <r>     <Machine0/>     <Machine1/> </r> 

will be valid per your XSD, but these XML documents,

Invalid case #1

<?xml version="1.0" encoding="UTF-8"?> <r>     <xMachine0/>     <Machine1/> </r> 

Invalid case #2

<?xml version="1.0" encoding="UTF-8"?> <r>     <Machine0x/>     <Machine1/> </r> 

Invalid case #3

<?xml version="1.0" encoding="UTF-8"?> <r>     <Machine/>     <Machine1/> </r> 

will be invalid, as requested.

</div
 
 
         
         

Связанный проблема

-3  Как я могу извлечь идентификаторы форм из определенных URL-адресов с помощью Regex? [закрыто]  ( How can i extract ids of forms from specific urls using regex ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> <Путь d = "M15 6.38A6.48 6.48 0 007.78. 04H-.02A6.49 6.49 0 002.05 ...

2  Как использовать Regex с JSON_EXTRACT на большом запросе  ( How to use regex with json extract on big query ) 
У меня есть поле JSON на большом настольном запросе и в настоящее время я использую следующий метод, чтобы сделать извлечение из элемента ID (например): <ко...

7  Ruby Regexp Обработка NBSP  ( Ruby regexp handling of nbsp ) 
в Ruby 1.9.3 Двигатель Regex не лечит NBSP ( U00A0) как пространство (ы). Это часто облом для меня. Так мой вопрос, будет ли это изменение в 2.0? Если нет, ...

1  Узор сопоставления Regex внутри шаблона упаковки  ( Regex match pattern inside a wrapping pattern ) 
Я хочу сопоставить все номера телефонов, которые обернуты между & lt; и & gt; & gt; Теги. Это регулярное выражение для телефонов: <код> 0[2349]{1}-[1-9]{1}...

0  Регулярное выражение, чтобы игнорировать пустой HREF  ( Regular expression to ignore empty href ) 
Я написал одну функцию для замены значения <код> href с quepalue + оригинал <код> href значение Скажите: - <код> <a href="/somepage.htm" id="test"> ...

1  JavaScript Regexp, чтобы соответствовать строке, которая не  ( Javascript regexp to match a string which isnt ) 
Учитывая это регессу: <код> @([a-z0-9_-]{3,}) Я не хочу, чтобы он соответствовал, если шаблон «Специальное пользователя». <код> @Tom = match @SpecialU...

1  Как заменить «» с «\» из строки с помощью JavaScript?  ( How to replace with from a string using javascript ) 
Я попробовал <код> mystring.replace(/\/g,"\") но это не сработало. Может кто-нибудь посоветовать мне, как сделать эту замену? Пример: <код> String = "C:Use...

0  Как разбирать вывод SVN в Node.js с помощью Regexp?  ( How to parse svn output in node js using regexp ) 
Я хочу разобрать выходы журнала Subvversion, получают фильтрованную информацию и храните их в таблице БД. К сожалению, нет обертки SVN для Node.js. У меня ест...

0  Изменить номер формата  ( Change number format ) 
У меня есть линией лота, содержит <код> XXXXXXXXX-XXX.XXX формат номера. Я хочу изменение номера <код> XXXXXXXXX-XXX.XXX к <код> XX.XXX.XXX.X-XXX.XXX <Ко...

8  NG-Pattern дает «ошибку лексера»?  ( Ng pattern gives lexer error ) 
как атрибут входного элемента у меня есть: <код> ng-pattern="^d{5}(?:[-s]d{4})?$" Что это не так это выражение? Я получаю эту ошибку: <код> Lexer Er...

0  PHP Copy () Проблемы и специальные символы  ( Php copy problems and special characters ) 
Я в настоящее время копирую определенные файлы, когда пользователь обновляет определенную информацию. Тем не менее, поскольку мы не можем иметь особых специал...

0  Как использовать Regex в следующей строке, чтобы избежать определенного персонажа  ( How to use regex in the following string to avoid some specific character ) 
<код> "{"key1":val1,"key1":val1,"key3":val3,"key4":val4}" Как получить Val3, используя REGEX без использования двойной кавычки («»). Я хочу получить зна...

87  Регулярное выражение для URL-адресов в Java  ( Regular expression to match urls in java ) 
<Р> Я использую RegexBuddy при работе с регулярными выражениями. Из своей библиотеки я скопировал регулярное выражение для URL-адресов. Я успешно протестирован...

0  Удалить данные с помощью Regex [Дубликат]  ( Remove data using regex ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

1  Разделение строки в номер телефона и расширение с помощью preg_match  ( Splitting a string into a phone number and extension using preg match ) 
Так что я пытаюсь разделить строку, которая содержит номер телефона и расширение, так как иногда существует расширение в строке. Это моя попытка: <код> $tes...




© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.