@Tim02

Как в xsd прописать такое правило?

Есть такой xml (упрощенно):
<state-machine xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:noNamespaceSchemaLocation="..." name="post" initialState="draft">
    <state value="draft" label="Черновик">
        <event target="verified" label="Проверка" name="verify"/>
        <event target="cancelled" label="Отмена" name="cancelling"/>
    </state>
	
    <state value="verified" label="Проверенный" />
    <state value="cancelled" label="Отмененный" />
</state-machine>


В нем на свойство "target" ноды state>event надо наложить ограничение: "только список value из всех существующих state" то-есть в данном случае можно подставить только ['draft', 'verified', 'cancelled'] Как то это можно сделать?
Описание xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
           xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="state-machine" type="state-machineType"/>
    <xs:complexType name="eventType">
        <xs:attribute type="xs:string" name="target" use="required"/>
        <xs:attribute type="xs:string" name="label" use="required"/>
        <xs:attribute type="xs:string" name="name" use="required"/>
    </xs:complexType>
    <xs:complexType name="stateType">
        <xs:sequence>
            <xs:element type="eventType" name="event" maxOccurs="unbounded" minOccurs="0"/>
        </xs:sequence>
        <xs:attribute type="xs:string" name="value"  use="required"/>
        <xs:attribute type="xs:string" name="label"  use="required"/>
    </xs:complexType>
    <xs:complexType name="state-machineType">
        <xs:sequence>
            <xs:element type="stateType" name="state" maxOccurs="unbounded" minOccurs="0"/>
        </xs:sequence>
        <xs:attribute type="xs:string" name="name"/>
        <xs:attribute type="xs:string" name="initialState"/>
    </xs:complexType>
</xs:schema>
  • Вопрос задан
  • 37 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы