我下面有xml,它主要包含自动化测试所需的测试数据。我们之前使用过xls,但是由于在GIT中进行版本控制很困难,因此我们想转向XML。现在,问题是-在XLS中,所有行始终是一致的(它们具有相同的标头),但是在XML中,member1可能添加具有2个参数的row-1,member2添加具有4个参数的row-2。随着行数的增加,很难看到哪些参数已经存在。在Excel中,我们可以简单地检查标题。 我想限制xml在同一Datasheet节点下的所有行都具有相同的参数。有人可以告诉我如何为此创建XSD吗?我是xml的新手。
<?xml version = "1.0"? >
<Workbook xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Sample.xsd" >
<Datasheet name = "sheet1">
<Row rowid="1">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>85</marks>
</Row>
<Row rowid="1">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>85</marks>
</Row>
<Row rowid="2">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>85</marks>
</Row>
</Datasheet>
<Datasheet name = "sheet2">
<Row rowid="2">
<firstname2>Vaneet</firstname2>
<lastname2>Gupta</lastname2>
<nickname2>vinni</nickname2>
<marks2>95</marks2>
</Row>
</Datasheet>
</Workbook>
答案 0 :(得分:1)
这是一个简单的示例教程,以学习如何做: XSD How To?
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="Workbook">
<xs:complexType>
<xs:sequence>
<xs:element name="Datasheet" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Row" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"></xs:element>
<xs:element name="lastname" type="xs:string"></xs:element>
<xs:element name="nickname" type="xs:string"></xs:element>
<xs:element name="marks" type="xs:int"></xs:element>
</xs:sequence>
<xs:attribute name="rowid" type="xs:int"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="xmlns:xsi" type="xs:string"></xs:attribute>
<xs:attribute name="xsi:noNamespaceSchemaLocation" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>
答案 1 :(得分:0)
在XSD 1.1中,您可以要求所有行与以下各项保持一致:
<xs:element name="rows">
<xs:complexType>
<xs:sequence>
<xs:element name="row" maxOccurs="unbounded"/>
<xs:complexType>
<xs:sequence>
<xs:any maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:assert test="every $h in head(rows), $t in tail(rows)
satisfies deep-equal($h/*/node-name(.), $t/*/node-name(.)"/>
</xs:complexType>
</xs:element>
不可能使用XSD 1.0定义此约束。