Как сделать атрибут из нескольких перечислений?схема XSD - PullRequest
0 голосов
/ 15 мая 2018

Я собираюсь создать базу данных, в которой будет дата выпуска некоторых продуктов в Японии, Северной Америке и Европейском Союзе. Я хочу сделать так, чтобы, если какая-то дата повторялась в одном и том же продукте, я мог сгруппировать зоны в один элемент, например так:

<releasedate>
     <zone zone="JP">30/08/1987</zone>
     <zone zone="NA|EU">22/11/1987</zone>
</releasedate>

В схеме у меня есть следующий код:

<xsd:attribute name="zone">
 <xsd:simpleType>
  <xsd:restriction base="xsd:string">
   <xsd:enumeration value="JP"/>
    <xsd:enumeration value="NA"/>
    <xsd:enumeration value="EU"/>
   </xsd:restriction>
  </xsd:simpleType>
 </xsd:attribute>

также пытался создать шаблон типа «JP | NA | UE» и «(JP | NA | UE) {1,3}». у меня ничего не работает, я не знаю, неправильно ли я использую способ разделения значений, но я попробовал трубу | а также с пробелами в атрибуте

1 Ответ

0 голосов
/ 15 мая 2018

Вы можете определить xsd:simpleType:

<xsd:simpleType name="location">
  <xsd:restriction base="xsd:string">
    <xsd:pattern value="((^|\|)(JP|NA|EU))+$"/>
  </xsd:restriction>
</xsd:simpleType>

Регулярное выражение внутри pattern value будет соответствовать значениям, таким как JP, JP|NA, JP|NA|EU и всем другим возможным комбинациям.

Тогда вам просто нужно ограничить значение атрибута location:

<xsd:attribute name="zone" type="location"/>
...