Локально уникальный? - PullRequest
       2

Локально уникальный?

2 голосов
/ 19 января 2011

Я пытаюсь разобраться в уникальных и ключевых элементах XML-схемы, особенно в отношении селектора и элементов поля внутри.

Мне неясно с селекторами и полями, и мне нужно разобраться в этом.

Предположим, у меня был файл XML с компаниями, включенными в функциональные группы. У меня есть элемент в каждой группе с уникальным полем (для ссылки каждая конкретная группа).

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

Было бы это правильно?:

    <xs:unique id="company_group_refs" name="company_group_refs">
        <xs:selector xpath="root/all_companies/company_group"/>
        <xs:field xpath="company_group_ref"/>
    </xs:unique>

    <xs:unique id="company_refs" name="company_refs">
        <xs:selector xpath="root/all_companies/company_group"/>
        <xs:field xpath="company/company_ref"/>
    </xs:unique>

Если это так, могу ли я привести вышесказанное к этому?:

    <xs:unique id="company_refs" name="company_refs">
        <xs:selector xpath="root/all_companies/company_group"/>
        <xs:field xpath="company_group_ref"/>
        <xs:field xpath="company/company_ref"/>
    </xs:unique>

Для ссылки на любое название компании, в частности, я хочу иметь возможность дать выражение XPath, подобное этому:

корень / all_companies / company_group [company_group_ref = x1] / компания [company_ref = x2] / имя

Где: x1 = уникальная ссылка для группы компаний.
и: x2 = уникальная ссылка на компанию в этой группе.

Ниже приводится выдержка из файла XML, которая иллюстрирует этот сценарий:

<all_companies>

    <company_group>
        <company_group_name>Cleaning</company_group_name>
        <company_group_ref>1</company_group_ref>
        <company>
            <name>Ajax</name>
            <company_ref>1</company_ref>
        </company>
        <company>
            <name>Bloomburg</name>
            <company_ref>2</company_ref>
        </company>
        <company>
            <name>Morris</name>
            <company_ref>3</company_ref>
        </company>
    </company_group>

    <company_group>
        <company_group_name>Electrical</company_group_name>
        <company_group_ref>2</company_group_ref>
        <company>
            <name>Armstrong</name>
            <company_ref>1</company_ref>
        </company>
        <company>
            <name>Bloomburg</name>
            <company_ref>2</company_ref>
        </company>
        <company>
            <name>Zap Electrical</name>
            <company_ref>3</company_ref>
        </company>
        <company>
            <name>Morris</name>
            <company_ref>4</company_ref>
        </company>
    </company_group>

</all_companies>

СПАСИБО !!!

1 Ответ

1 голос
/ 19 января 2011

Ваше ограничение требовать уникальности group_refs является правильным. Ограничение на то, чтобы сделать company_refs уникальным внутри группы, должно выглядеть следующим образом

<xs:element name="company_group">
  <xs:unique name="company_unique_within_group">
    <xs:selector xpath="company">
    <xs:field xpath="company_ref">
  </xs:unique>
  ...
</xs:element>

Прочитайте это как "внутри группы компаний", "выберите все компании" и потребуйте, чтобы "company_ref был уникальным среди них".

Ваше ограничение company_ref гласит: "глобально" "для всех group_group" требуется, чтобы "company / company_ref было уникальным".

Ваше сжатое ограничение выражает нечто совершенно иное: «глобально» «для всех company_groups» требует, чтобы «комбинация company_group_ref и company / company_ref« была уникальной ». Учитывая, что на каждую группу фактически приходится несколько company_refs, последние два являются бессмысленными .

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