xml架构是否可以根据另一个元素值的存在来验证元素值?

时间:2017-12-14 15:32:08

标签: xml xsd

我是关于xml / xsd的新手,并且对与验证元素值相关的问题表示赞赏。

我正在开发一个系统来处理课程中的课程。课程将包括一组课程,每门课程将具有许多特征,包括身份证。

课程的先决条件是与xml中指定的其他课程相对应的ID。

有没有办法验证先决条件元素中的ID号是否作为另一个元素的课程ID存在?

以下是我在架构上的开始。

感谢您提供任何建议。

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

  <xs:element name="course">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="ap:id"/>
                <xs:element ref="ap:prerequisite" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
  </xs:element>

  <xs:element name="id" type=?????>
  </xs:element>

  <xs:element name="prerequisite" type=?????>
  </xs:element>

</xs:schema>

1 个答案:

答案 0 :(得分:1)

您可以使用xs:key和xs:keyref执行此操作。希望知道关键字将使您能够在您喜欢的XML Schema教科书中找到相关部分......

要记住的主要事情是这些声明必须作为约束适用的元素的元素声明的一部分出现:如果规则是&#34;在X中,每个Y必须具有Z的不同值,每个V必须有一个W的值,它与某些Y的Z值匹配(在同一个X中)&#34;然后

  • 在X的声明中,定义名称为N的键,选择= Y,字段= Z

  • 在X的声明中,定义一个keyref,其中ref = N,selection = V,field = W.

在你的例子中,Y是课程,Z是id,V是先决条件,W是id。我不知道X是什么,但它可能是你课程元素的父母。