我的任务是为我的测试框架创建一个模式,验证一个属性和一个元素组合在一起形成一个唯一的对。在向您展示示例XML段之后,我会更好地解释一下。
<Test name="testName" dll="testDLL" active="true" >
<model cad_sys="targetSystem" dir="directory">
<name>modelName</name>
</model>
</Test>
在这种情况下,我们感兴趣的两个项目是testName和modelName。理想情况下,这是测试用例的流程
现在,我已经尝试过这个,并且已经学到了很多我不知道的模式,但是我对如何解决这个问题感到有点难过它的。
如果你们有任何指导,我们非常感激。
答案 0 :(得分:1)
您可以使用xs:unique
和多个xs:fields
将其连接限制为唯一组合:
<xs:unique name="testNameModelNameUnique">
<xs:selector xpath="Test"/>
<xs:field xpath="@name"/>
<xs:field xpath="model/name"/>
</xs:unique>
XSD中的xs:unique
来验证您的XML并强制执行约束:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="Tests">
<xs:complexType>
<xs:sequence>
<xs:element ref="Test" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="testNameModelNameUnique">
<xs:selector xpath="Test"/>
<xs:field xpath="@name"/>
<xs:field xpath="model/name"/>
</xs:unique>
</xs:element>
<xs:element name="Test">
<xs:complexType>
<xs:sequence>
<xs:element name="model">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
<xs:attribute name="cad_sys" type="xs:string"/>
<xs:attribute name="dir" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="active" type="xs:boolean"/>
<xs:attribute name="dll" type="xs:string"/>
<xs:attribute name="name" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:schema>