XML 和 XSD 使用限制验证失败

XML and XSD validation failed using restriction

使用限制验证后出现错误未知节点:限制 我找不到错误。有人可以在 XSD 中帮助我吗? 这是我的 XML :

<?xml version="1.0" encoding="UTF-8"?>
    <DataChannelconfig>
        <DataTypeVersion>1</DataTypeVersion>
        <FileformatVersion>0</FileformatVersion>
        <DataChannel>
            <Name>Supply Pump Flow Speed</Name>
            <Datatype>Numeric</Datatype>
            <Tag>Supply_Pump_Flow_Speed</Tag>
            <Graph>
                <Enable>0</Enable>
                <AxisNo>0</AxisNo>
                <Colour>255.0.225</Colour>
            </Graph>
            <Table>
                <Enable>1</Enable>
                <Table-ID>0</Table-ID>
                <Table-Row>9</Table-Row>
                <Unit>ml/min</Unit>
            </Table>
    </DataChannel>
</DataChannelconfig>

这是我的XSD:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="DataChannelconfig">
 <xs:complexType>
  <xs:sequence>
    <xs:element name="DataTypeVersion" type="xs:byte"/>
    <xs:element name="FileformatVersion" type="xs:byte" />
    <xs:element name="DataChannel" type="xs:string">
     <xs:complexType>
      <xs:sequence>
       <xs:element name="Name" type="xs:string"/>
        <xs:attribute name="Name"> 
         <xs:simpleType>
          <xs:restriction base="xs:string">
           <xs:pattern value="[a-zA-Z0-9_.'!@#$%^*()]{20}"/
          </xs:restriction>
         </xs:simpleType>
        </xs:attribute> 
       <xs:element name="Datatype" type="xs:string"/>
        <xs:attribute name="Datatype"> 
         <xs:simpleType>
          <xs:restriction base="xs:string">
           <xs:pattern value="[a-zA-Z0-9_.'!@#$%^*()]{20}"/>
          </xs:restriction>
         </xs:simpleType>
        </xs:attribute>
       <xs:element name="Tag" type="xs:string"/>
        <xs:attribute name="Datatype"> 
         <xs:simpleType>
          <xs:restriction base="xs:string">
           <xs:pattern value="[a-zA-Z0-9_.'!@#$%^*()]{20}"/>
          </xs:restriction>
         </xs:simpleType>
        </xs:attribute>
       <xs:element name="Graph">
        <xs:complexType>
         <xs:sequence>
          <xs:element type="xs:byte" name="Enable"/>
           <xs:restriction base="xs:byte">
            <xs:minInclusive value="0"/>
            <xs:maxInclusive value="1"/>
           </xs:restriction>
          <xs:element type="xs:byte" name="AxisNo"/>
           <xs:restriction base="xs:byte">
            <xs:minInclusive value="0"/>
            <xs:maxInclusive value="1"/>
           </xs:restriction>
          <xs:element type="xs:string" name="Colour"/>
           <xs:restriction base="xs:string">
            <xs:pattern value="[0-9]{3}[.][0-9]{3}[.][0-9]{3}"/>
           </xs:restriction>
          </xs:sequence>
         </xs:complexType>
        <xs:element name="Table">
         <xs:complexType>
          <xs:sequence>
           <xs:element type="xs:byte" name="Enable"/>
            <xs:restriction base="xs:byte">
             <xs:minInclusive value="0"/>
             <xs:maxInclusive value="1"/>
            </xs:restriction>
            <xs:element type="xs:byte" name="Table-ID"/>
             <xs:restriction base="xs:byte">
              <xs:minInclusive value="1"/>
              <xs:maxInclusive value="3"/>
             </xs:restriction>
            <xs:element type="xs:string" name="Table-Row"/>
             <xs:restriction base="xs:byte">
              <xs:minInclusive value="0"/>
              <xs:maxInclusive value="14"/>
             </xs:restriction>
            <xs:element type="xs:string" name="Unit"/>
             <xs:restriction base="xs:string">
              <xs:pattern value="[a-zA-Z0-9_.'!@#$%^*()]{20}"/>
             </xs:restriction>
          </xs:sequence>
         </xs:complexType>
        </xs:element>
      </xs:sequence>
     </xs:complexType>
    </xs:element>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
</xs:schema>

我的 XSD 文件有什么问题?

使用 Visual Studio 尝试打开我得到的架构

Failed to load schema.

Reason : The 'http://www.w3.org/2001/XMLSchema:attribute' element is not supported in this contex

问题是

  1. 您在序列中声明了同名的元素和属性。属性应该位于序列之外(之后)。但是你的样本没有任何属性,所以我把它们去掉了。

  2. 您忘记了这一行的结尾>

    <xs:pattern value="[a-zA-Z0-9_.'!@#$%^*()]{20}"/

  3. 元素图形缺少结束标记

  4. Enable、AxisNo、Color等元素是自终止的,它们需要在需要被类型节点包裹的限制之后终止,而不是元素上声明的类型。

这是应该的样子。

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="DataChannelconfig">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="DataTypeVersion" type="xs:byte"/>
        <xs:element name="FileformatVersion" type="xs:byte" />
        <xs:element name="DataChannel">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Name">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:pattern value="[a-zA-Z0-9_.'!@#$%^*()]{20}"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
              <xs:element name="Datatype">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:pattern value="[a-zA-Z0-9_.'!@#$%^*()]{20}"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
                <xs:element name="Tag" type="xs:string"/>
              <xs:element name="Graph">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Enable">
                      <xs:simpleType>
                      <xs:restriction base="xs:byte">
                        <xs:minInclusive value="0"/>
                        <xs:maxInclusive value="1"/>
                      </xs:restriction>
                      </xs:simpleType>
                    </xs:element>
                    <xs:element name="AxisNo">
                      <xs:simpleType>
                      <xs:restriction base="xs:byte">
                        <xs:minInclusive value="0"/>
                        <xs:maxInclusive value="1"/>
                      </xs:restriction>
                        </xs:simpleType>
                    </xs:element>
                    <xs:element name="Colour">
                      <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:pattern value="[0-9]{3}[.][0-9]{3}[.][0-9]{3}"/>
                      </xs:restriction>
                        </xs:simpleType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
                <xs:element name="Table">
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element name="Enable">
                        <xs:simpleType>
                          <xs:restriction base="xs:byte">
                            <xs:minInclusive value="0"/>
                            <xs:maxInclusive value="1"/>
                          </xs:restriction>
                        </xs:simpleType>
                      </xs:element>
                      <xs:element  name="Table-ID">
                        <xs:simpleType>
                          <xs:restriction base="xs:byte">
                            <xs:minInclusive value="1"/>
                            <xs:maxInclusive value="3"/>
                          </xs:restriction>
                        </xs:simpleType>
                      </xs:element>
                      <xs:element name="Table-Row">
                        <xs:simpleType>
                          <xs:restriction base="xs:byte">
                            <xs:minInclusive value="0"/>
                            <xs:maxInclusive value="14"/>
                          </xs:restriction>
                        </xs:simpleType>
                      </xs:element>
                      <xs:element name="Unit">
                        <xs:simpleType>
                          <xs:restriction base="xs:string">
                            <xs:pattern value="[a-zA-Z0-9_.'!@#$%^*()]{20}"/>
                          </xs:restriction>
                        </xs:simpleType>
                      </xs:element>
                    </xs:sequence>
                  </xs:complexType>
                </xs:element>
              </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

对您的示例使用上述模式会得到以下输出

The 'Name' element is invalid - The value 'Supply Pump Flow Speed' is invalid according to its datatype 'String' - The Pattern constraint failed.
The 'Datatype' element is invalid - The value 'Numeric' is invalid according to its datatype 'String' - The Pattern constraint failed.
The 'Colour' element is invalid - The value '255.0.225' is invalid according to its datatype 'String' - The Pattern constraint failed.
The 'Table-ID' element is invalid - The value '0' is invalid according to its datatype 'Byte' - The MinInclusive constraint failed.
The 'Unit' element is invalid - The value 'ml/min' is invalid according to its datatype 'String' - The Pattern constraint failed.