加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

指定XSD,使XML元素必须具有另一个XML元素的值

发布时间:2020-12-16 23:23:33 所属栏目:百科 来源:网络整理
导读:我不确定这是否可以使用 XML / XSD,并且没有太多的运气搜索它. 您是否可以指定XSD,以便在编写XML时,您可以拥有一个必须引用另一个XML元素中包含的值之一的元素? 例如,如果您有这个XML: carAudi/carcarFord/carcarHonda/carperson drivesAudi/drives/person
我不确定这是否可以使用 XML / XSD,并且没有太多的运气搜索它.

您是否可以指定XSD,以便在编写XML时,您可以拥有一个必须引用另一个XML元素中包含的值之一的元素?

例如,如果您有这个XML:

<car>Audi</car>
<car>Ford</car>
<car>Honda</car>

<person>
  <drives>Audi</drives>
</person>

如何为驱动器指定XSD,使其必须是为汽车输入的值之一?

解决方法

使用XSD 1.1,您可以使用 assertions.

Assertion components constrain the existence and values of related
elements and attributes.

您可以使用XPath 2.0表达式在断言中执行验证/测试.

此示例模式具有/ doc元素的断言,该断言确保/ doc / person / drives值等于其中一个/ doc / car元素:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.1" elementFormDefault="qualified">

    <xs:element name="car" type="xs:string" />  
    <xs:element name="drives" type="xs:string" />

    <xs:element name="person">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="drives"/>
            </xs:sequence>     
        </xs:complexType>
    </xs:element>

    <xs:element name="doc">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="car" maxOccurs="unbounded"/> 
                <xs:element ref="person"/>
            </xs:sequence> 
            <xs:assert test="person/drives = car"/>
        </xs:complexType>
    </xs:element>

</xs:schema>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读