2017-01-25 14 views
0

Я борюсь с пониманием key:keyref в xml.Борьба с key-keyref

Моя структура

<Regions> 
    <Region Name="Simple region name"> 
     <NumberOfWineries>3</NumberOfWineries> 
     <Winery Name="Simple winery"> 
      <City>Simple city</City> 
      <Owner>Simple owner</Owner> 
      <Image photo="img_winary"/> 
      <NumberOfDiffrentWines>2</NumberOfDiffrentWines> 
      <Wines> 
       <Wine Name="Cool wine" Vintage="2003"> 
        <Characteristics> 
         <Color>blue</Color> 
        </Characteristics> 
       </Wine> 
      </Wines> 
     </Winery> 
    </Region> 
    <Region....> 
     ..... 
    </Region> 
</Regions> 

Здесь я strugling с созданием key:keyref от вина винодельни.

Я думал о создании уникального винодельни id и ссылался на этот идентификатор для каждого вина.

Что-то вроде

<winery id="1" /> 
<wine idref="1" /> 

Это не так ясно для меня, может кто-то наставит меня, если я иду по неправильному пути.

Заранее спасибо.

+0

Поскольку элемент вина находится внутри элемента винного завода, зачем вам нужно соотношение ключевых/ключевых? Будет ли это иметь другую семантику из отношений сдерживания? –

+0

@MichaelKay Я просто изучаю. Я готов изменить структуру до тех пор, пока я могу достичь ключа: keyref и понять его. –

+0

Но «использование ключа: keyref» не является обязательным требованием. Мне нужно понять, чего вы хотите достичь, используя его. –

ответ

0

код exmaple следит за некоторые детали опущены:

<xs:element name="root" type="Root"> 
    <xs:key name="aKey"> 
     <xs:selector xpath=".//Winery"/> 
     <xs:field xpath="@id"/> 
    </xs:key> 
    <xs:keyref name="aKeyRef" refer="aKey"> 
     <xs:selector xpath=".//wine"/> 
     <xs:field xpath="@wineryRef"/> 
    </xs:keyref> 
</xs:element> 
<xs:complexType name="Root"> 
    <xs:sequence> 
     <xs:element ref="Winery"/> 
    </xs:sequence> 
</xs:complexType> 
<xs:element name="Winery"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="Wines" type="wines"/> 
     </xs:sequence> 
     <xs:attribute name="id" type="xs:string" use="required"/> 
    </xs:complexType> 
</xs:element> 
<xs:complexType name="wines"> 
    <xs:sequence> 
     <xs:element name="wine" type="wine" maxOccurs="unbounded"/> 
    </xs:sequence> 
</xs:complexType> 
<xs:complexType name="wine"> 
    <xs:sequence> 
     <xs:element name="chara" type="xs:string"/> 
    </xs:sequence> 
    <xs:attribute name="wineryRef" type="xs:string"/> 
</xs:complexType> 

Некоторые важные замечания:

  • Определение key и keyref в теле элемента
  • Используйте подходящий синтаксис XPath для обозначения вашего узел

Вы можете f примеры и объяснения в my xsd tutorial.