2011-01-18 5 views
2

Я пытаюсь получить уникальные и ключевые элементы для 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

Ваше ограничение требует уникальности 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_group» «выбрать все компании» и требуют, чтобы «company_ref является уникальным среди них».

Ограничение вашей компании_ref говорит: «глобально» «для всех компаний-групп» требует, чтобы «company/company_ref была уникальной».

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

+0

Привет, Мартин! Спасибо за ответ и ответ. Это имеет смысл. – user304607

Смежные вопросы