如何编写xsd以满足以下XML要求

时间:2015-03-11 10:05:15

标签: xml xsd xsd-validation

我有以下需要XSD的xml。

<?xml version="1.0" encoding="UTF-8"?>
 <Metadata>
  <Field Name="Claim Number">100</Field>
  <Field Name="Audit Year">2010</Field>
  <Field Name="Auditor Name">ABC PQR</Field>
</Metadata>

在上面的xml中,如果我删除<Field Name="Audit Year">2010</Field>这一行,那么它必须说“Audit Year”在给定的XML中不存在。

下面是现在的XSD,但这不是一个正确的方法。

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xs:simpleType name="temp" >
<xs:restriction base="xs:string">
  <xs:enumeration value="Audit Year" />
</xs:restriction>

<xs:element name="Metadata">
<xs:complexType>
  <xs:sequence>
    <xs:element maxOccurs="unbounded" name="Field">
      <xs:complexType>
        <xs:simpleContent>
          <xs:extension base="xs:string">
           <xs:attribute name="Name" type="temp" use="required"/>
           <!--<xs:attribute name="Name" type="xs:string" use="optional" />-->
          </xs:extension>
        </xs:simpleContent>
      </xs:complexType>
    </xs:element>
  </xs:sequence>
</xs:complexType></xs:element></xs:schema>

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是将每个Field name="X"元素重命名为X,因此您的XML是

<Metadata>
  <ClaimNumber>100</ClaimNumber>
  <AuditYear>2010</AuditYear>
  <Auditor>ABC PQR</Auditor>
</Metadata>

现在任务很简单。