Как применить разные ограничения к одному и тому же сложному типу в зависимости от родительского тега - PullRequest
0 голосов
/ 27 марта 2020

Я хотел бы достичь сценария, показанного ниже, в котором у меня есть один и тот же элемент (в данном случае компонент) с разными родителями. Я хочу добавить ограничение только на первый уровень <<strong> component >. Например, я хочу добавить ограничение, согласно которому цвет (под компонентами) может быть только желтым или зеленым, а цвет в <<strong> component-set > может быть любым.

<components>
    <component color="yellow"/>
    <component color="green"/>
    <component-set>
      <component color="black"/>  
    </component-set>
  </xs:complexType>
</components>

это мой текущий xsd, и я не должен редактировать сложный тип или имя элемента.

<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://../custom.xsd" xmlns="http://../custom.xsd">

 <xs:complexType name="componentType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute type="xs:string" name="color" use="required"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:complexType name="component-setType" mixed="true">
    <xs:sequence>
      <xs:element type="componentType" name="component" maxOccurs="unbounded" minOccurs="1"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="componentsType">
    <xs:choice maxOccurs="unbounded" minOccurs="0">
      <xs:element type="componentType" name="component"/>
      <xs:element type="component-setType" name="component-set"/>
    </xs:choice>
  </xs:complexType>
</xs:schema>

1 Ответ

1 голос
/ 27 марта 2020

Вы уже используете объявления локальных элементов (xs:element с атрибутом name, появляющимся в модели содержимого сложного типа). Два объявления локальных элементов, появляющиеся в разных моделях контента, могут иметь разные типы; просто потому, что оба элемента называются "component", не означает, что они оба должны иметь тип "componentType".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...