xs: unique и xs: substitutionGroup - PullRequest
       0

xs: unique и xs: substitutionGroup

1 голос
/ 18 декабря 2010

У меня есть xs: уникальное объявление в схеме. Это хорошо работает. Но когда я заменяю элемент, который является ключом, он больше не работает.

Есть ли что-то, что гарантирует сохранение уникального ключа при замене?

Например, у меня есть этот xml:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <el id="1"/>
  <el id="2"/>
</root>

и эта схема:

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:complexType name="typeel">
      <xs:attribute name="id"/>
    </xs:complexType>

  <xs:element name="el" type="typeel"/>

  <xs:element name="root">
    <xs:complexType>
      <xs:sequence maxOccurs="unbounded">
        <xs:element ref="el"/>
      </xs:sequence>
    </xs:complexType>
    <xs:unique name="idgoooood">
      <xs:selector xpath="el"/>
      <xs:field xpath="@id"/>
    </xs:unique>
  </xs:element>
</xs:schema>

Это очень хорошая работа.

Но, если я добавлю в схему:

  <xs:element name="el-bis" type="typeel"  substitutionGroup="el"/>

Я могу написать свой xml:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <el id="1"/>
  <el id="2"/>
  <el-bis id="3"/>
</root>

Очень хорошо. Но, к сожалению, я могу написать также:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <el id="1"/>
  <el id="2"/>
  <el-bis id="2"/>
</root>

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

Спасибо.

1 Ответ

0 голосов
/ 14 ноября 2011

Я думаю, что это невозможно. Вы должны скопировать объявление уникальности в замещающий элемент.

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