Уникальность значений элементов

    Цель: ограничить значение элементов по уникальности с помощью ключа.
    Задачи:
    • Создать элемент key.
    • Задать элемент, значение в котором должно быть уникальным.
    • Задать контейнер, в рамках которого должна проверяться уникальность.
    • Сохранить файл.

    На занятии приведено описание элементов unique, key, keyref. На практике использован элемент key.

    Ключи применяются, если есть необходимость ограничить значение элементов по уникальности. Описывается элементами unique, key, keyref.

    Элемент unique определяет, что значение атрибута или элемента должно быть уникальным в данной области видимости.
    Элемент unique должен содержать в определенном порядке:
    один и только один элемент selector (содержит выражение XPath, определяющее набор элементов, в котором значения полей должны быть уникальными)
    один и только один элемент field (содержит выражение XPath, определяющее значения, которые должны быть уникальными для набора элементов, заданных элементом selector)

    Элемент key казывает, что значение атрибута или элемента (либо набор значений) должно быть ключом в данной области видимости. Область видимости ключа – элемент-контейнер element в документе экземпляра. Ключ должен быть уникальным в пределах конкретной области действия, необнуляемым и постоянно доступным.
    Отличие от элемента unique заключается в обязательности элемента, для которого указывается ключ.
    Ознакомиться с атрибутами элемента можно в Справочнике атрибутов.

    Элемент keyref определяет, что значение атрибута или элемента соответствует значению указанного элемента key и unique.
    Элемент keyref должен содержать в определенном порядке:
    один и только один элемент selector (содержит выражение XPath, определяющее набор элементов, в котором значения полей должны быть уникальными)
    один и только один элемент field (содержит выражение XPath, определяющее значения, которые должны быть уникальными для набора элементов, заданных элементом selector)

    По текущей версии схемы можно несколько раз указать один и тот же предмет договора, что является некорректным. Необходимо задать уникальность для значения элемента.
    1. В программе Altova XMLSpy откройте свой файл схемы, выбрав пункт меню File - Open.

    2. Из контекстного меню элемента СontractRequest выберите Add child - Key.

    Рисунок 55 - Add child - Key

    3. В окне Details укажите наименование для ключа ContractSubjectKey.

    Рисунок 56 - наименование для ключа

    4. В окне Details выражение XPath для selector заполните ContractSubject.

    Рисунок 57 - выражение XPath для selector

    5. В окне Details выражение XPath для field задайте равным "." (точке), что соответствует текущему контейнеру СontractRequest.

    Рисунок 58 - выражение XPath для field

    В итоге на схеме должна отобразиться зеленая стрелка от ContractSubjectKey до элемента ContractSubject.

    Рисунок 59 - итог успешного выполнения

    С данным описанием значение в элементе ContractSubject не будет повторяться в рамках СontractRequest.
    По текущей версии схемы можно несколько раз указать один и тот же предмет договора, что является некорректным. Необходимо задать уникальность для значения элемента.
    1. В Блокноте откройте свой ранее созданный файл.

    2. Опишите элемент Key.

    Рисунок 60 - элемент Key

    3. Укажите наименование для ключа ContractSubjectKey, XPath для selector - ContractSubject, выражение XPath для field задайте равным "." (точке), что соответствует текущему контейнеру СontractRequest.
    В итоге с данным описанием значение в элементе ContractSubject не будет повторяться в рамках СontractRequest.

    На занятии приведено описание элементов unique, key, keyref. На практике использован элемент key.

    Вопросы для самопроверки:
    1. Назовите причины использовать элементы уникальности.
    2. Перечислите элементы уникальности.
    3. Наименования ключей могут повторяться?
    4. Назовите выражение XPath для field, которое будет соответствовать текущему контейнеру.