用key-keyref挣扎

时间:2017-01-25 21:56:16

标签: xml xsd 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>

在这里,我正忙着从葡萄酒到葡萄酒酿造key:keyref

我正在考虑制作一个独特的id酒庄,并为每一款葡萄酒提供这个ID。

这样的东西
<winery id="1" />
<wine idref="1" />

我不太清楚,如果我走的是错误的路,有人可以指导我。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

代码示例如下,省略了一些细节:

<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>

一些重要的注释:

  • 在元素正文
  • 中定义keykeyref
  • 使用合适的XPath语法引用您的节点

您可以在my xsd tutorial中找到更多示例和说明。