Шаблон регулярного выражения XSD для номера IP с префиксом имени машины? - PullRequest
1 голос
/ 21 января 2020

Я пытаюсь использовать шаблон с XSD для указанного атрибута c, как показано в следующем XML

<employee eName="bob dole"
          computerName=floor1.123.45.67.89 />

Имя компьютера: floor1.IP или floor2.IP.

Мой XSD-файл имеет следующее

<xs:element name="employee">
     <xs:complexType>
          <xs:attribute name="eName" use="required" type="xs:string" />
          <xs:attribute name="computerName" use="required">
               <xs:simpleType>
                    <xs:restriction>
                         <xs:pattern value="((floor1\.)||floor2\.))|(([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])" />
                    </xs:restriction>
               </xs:simpleType>
          </xs:attribute>
     </xs:complexType>
</xs:element>

У меня правильное выражение or, поскольку при запуске без компонента IP он работает. Тем не менее, когда я добавляю требование IP, оно проваливается с моим тестом XML.

1 Ответ

0 голосов
/ 21 января 2020

Многочисленные проблемы, которые нужно исправить:

  1. Атрибуты должны иметь (одинарные или двойные) кавычки в XML.
  2. xs:restriction должны иметь атрибут base в XSD: base="xs:string" будет работать здесь.
  3. Ваше регулярное выражение даже синтаксически неверно. Ниже приведен синтаксически и семантически правильный вариант для вашего XML.

XML

<employee eName="bob dole"
          computerName="floor1.123.45.67.89"/>

XSD

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           elementFormDefault="qualified">
  <xs:element name="employee">
    <xs:complexType>
      <xs:attribute name="eName" use="required" type="xs:string" />
      <xs:attribute name="computerName" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:pattern value="(floor[1|2]\.)(([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
</xs:schema>
...