【问题标题】:Struggling with key-keyref与 key-keyref 斗争
【发布时间】:2017-06-11 06:29:16
【问题描述】:

我正在努力理解 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" />

我不太清楚,如果我走错了路,谁能指导我。

提前谢谢你。

【问题讨论】:

  • 既然 wine 元素在 winery 元素中,为什么需要 key/keyref 关系?这会与包含关系有不同的语义吗?
  • @MichaelKay 我只是在学习。只要能实现key:keyref并理解,我愿意改结构。
  • 但“使用 key:keyref”不是必需的。我需要了解你想通过使用它来实现什么。

标签: xml xsd keyref


【解决方案1】:

代码示例如下,部分细节省略:

<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找到更多示例和解释。

【讨论】:

    猜你喜欢
    • 2020-09-18
    • 2018-05-23
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 2014-10-04
    相关资源
    最近更新 更多