如何在XML模式中正确使用unique和keyref?

编程入门 行业动态 更新时间:2024-10-28 07:34:37
本文介绍了如何在XML模式中正确使用unique和keyref?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有这个XML模式,但是我不知道如何完成它才能实现我所需要的.我在网上搜索了很多有关唯一用法和keyref用法的信息,但我所能找到的只是基本示例.

I have this XML schema but I don't know how to complete it in order to achieve what I need. I searched a lot online about unique and keyref usage, but all I can find are basic examples.

这是我的模式:

<xs:element name="access" type="myaccess" /> <xs:complexType name="myaccess"> <xs:sequence> <xs:element name="user" type="myuser" minOccurs="0" maxOccurs="unbounded"> <xs:unique name="u_idunique"> <xs:selector xpath="user" /> <xs:field xpath="@id" /> </xs:unique> </xs:element> <xs:element name="authorization" type="myauthorization" minOccurs="0" maxOccurs="unbounded"> <!-- HERE I WANT A KEYREF TO id attribute of user element --> <!-- HERE I WANT A KEYREF TO id attribute of building element OR door element --> </xs:element> <xs:element name="building" type="mybuilding" minOccurs="0" maxOccurs="unbounded" > <!-- I DON'T KNOW HOW TO SPECIFY THAT id of building, id of door and id of gate are in the same scope --> <xs:unique name="b_idunique"> <xs:selector xpath="building" /> <xs:field xpath="@id" /> </xs:unique> </xs:element> </xs:sequence> </xs:complexType> <xs:complexType name="myuser"> <xs:attribute name="id" type="my_id" use="required" /> <xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="phone" type="my_string_numeric" use="required" /> </xs:complexType> <xs:complexType name="mybuilding"> <xs:sequence> <xs:element name="door" type="mydoor" minOccurs="0" maxOccurs="unbounded"> <!-- I DON'T KNOW HOW TO SPECIFY THAT id of building, id of door and id of gate are in the same scope --> <xs:unique name="d_idunique"> <xs:selector xpath="door" /> <xs:field xpath="@id" /> </xs:unique> </xs:element> </xs:sequence> <xs:attribute name="id" type="my_id" use="required" /> <xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="country" type="xs:string" use="required" /> </xs:complexType> <xs:complexType name="mydoor"> <xs:sequence> <xs:element name="gate" type="mygate" maxOccurs="unbounded"> <!-- I DON'T KNOW HOW TO SPECIFY THAT id of building, id of door and id of gate are in the same scope --> <xs:unique name="g_idunique"> <xs:selector xpath="gate" /> <xs:field xpath="@id" /> </xs:unique> </xs:element> </xs:sequence> <xs:attribute name="id" type="my_id" use="required" /> <xs:attribute name="address" type="xs:string" use="required" /> <xs:attribute name="status" type="mystatus" default="DISABLED" /> </xs:complexType> <xs:complexType name="mygate"> <xs:attribute name="id" type="my_id" use="required" /> <xs:attribute name="type" type="mytype" use="required" /> <xs:attribute name="status" type="mystatus" default="DISABLED" /> </xs:complexType> <xs:complexType name="myauthorization"> <xs:sequence> <xs:element name="validityperiod" type="myvalidityperiod" /> </xs:sequence> <xs:attribute name="idu" type="my_id" use="required" /> <xs:attribute name="idao" type="my_id" use="required" /> </xs:complexType> <!-- OMITTED USELESS PART OF THE SCHEMA --> </xs:schema>

我有两个问题:

  • 我不知道如何指定建筑物的ID字段,门的ID字段和门的ID字段在同一范围内,并且我不能拥有2个ID等于(两个建筑物不能具有相同的ID,但门和建筑物不能共享相同的ID)
  • 我不知道如何正确使用keyref元素.
  • I don't know how to specify that the id field of building, the id field of door and the id field of gate are in the same scope and I can't have 2 id equals (two building can't have the same id, but also a door and a building can't share the same id)
  • I don't know how to use correctly the keyref element.
  • 我希望授权元素的idu字段是存在于其中一个用户元素中的id(请参阅下面的[*]).
  • 我希望授权元素的idao字段是一个ID,它存在于一个建筑元素或一个门元素中.
  • [*]我试图写这个,但是不起作用:

    [*] I tried to write this, but it's not working:

    <xs:keyref name="useridkeyref" refer="u_idunique"> <xs:selector xpath="authorization" /> <xs:field xpath="@idu" /> </xs:keyref>

    我知道这不是一个简短的问题,在此先感谢大家阅读.希望我能有所帮助.谢谢!

    I know this is not a short question and I thanks everyone in advance for reading it. I hope I can get some help. Thank you!

    推荐答案

    唯一约束和键的作用域位于element级别-您需要将约束不放在每个单独的元素内,而应放在access元素内是他们所有人的共同祖先.

    Unique constraints and keys are scoped at the element level - you need to put the constraint not inside each individual element, but inside the access element that is a common ancestor of them all.

    <xs:element name="access" type="myaccess"> <xs:key name="user_id"> <xs:selector xpath="user" /> <xs:field xpath="@id" /> </xs:key> <xs:key name="access_id"> <xs:selector xpath="building | building/door | building/door/gate" /> <xs:field xpath="@id" /> </xs:key> <xs:keyref name="user_ref" refer="user_id"> <xs:selector xpath="authorization" /> <xs:field xpath="@idu" /> </xs:keyref> <xs:keyref name="access_ref" refer="access_id"> <xs:selector xpath="authorization" /> <xs:field xpath="@idao" /> </xs:keyref> </xs:element>

    更多推荐

    如何在XML模式中正确使用unique和keyref?

    本文发布于:2023-11-17 03:58:09,感谢您对本站的认可!
    本文链接:https://www.elefans.com/category/jswz/34/1608749.html
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:正确   模式   如何在   keyref   XML

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!