XSD创建以进行XML验证

时间:2019-01-18 10:45:19

标签: java xml eclipse xsd-validation

我下面有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>

2 个答案:

答案 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定义此约束。