使用限制

时间:2016-11-04 13:20:46

标签: xml xsd 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文件有什么问题?

1 个答案:

答案 0 :(得分:0)

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

  

无法加载架构。

     

原因:   此上下文不支持“http://www.w3.org/2001/XMLSchema:attribute”元素

问题是

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

  2. 您忘记了结束&gt;在这一行

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

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

  4. 元素,Enable,AxisNo&amp;颜色等是自终止的,它们需要在需要由类型节点而不是元素上声明的类型包装的限制之后终止。

  5. 这应该是什么样的。

    <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.