你如何为这个XML编写XML Schema?

时间:2011-03-18 21:11:12

标签: xml xsd

如何为此xml节写XSD?

<sales>
    <orders>
        <order type="online">1234</order>
        <order type="online">2334</order>
        <order type="retail">7834</order>
        <order type="retail">5654</order>
    </orders>
</sales>

3 个答案:

答案 0 :(得分:1)

搜索xsd.exe(Xml Schema Definition Tool)的c:\ program files。然后将其用作 xsd.exe c:\ your.xml 。这是xml-scrap的输出:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="sales" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="sales" msdata:IsDataSet="true" msdata:Locale="en-US">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="orders">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="order" nillable="true" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:simpleContent msdata:ColumnName="order_Text" msdata:Ordinal="1">
                    <xs:extension base="xs:unsignedShort">
                      <xs:attribute name="type" type="xs:string" />
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

...当然,如果你理解了一些元素,它可以简化。

<xs:element name="sales">
  <xs:complexType>      
    <xs:sequence>
      <xs:element name="orders">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="order" maxOccurs="unbounded">
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:string">
                    <xs:attribute name="type" type="xs:string"/>                        
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>

答案 1 :(得分:1)

对于一次性,您可以使用各种工具从XML生成通用模式,但没有人会确切知道哪些约束很重要。例如,在您的示例中将“类型”限制为仅“在线”或“零售”是否重要?为了使它正确,你需要自己编写XML Schema。

尽管整个XML Schema很复杂,但您可以从阅读XML Schema Primer或其中一个教程中获得基础知识。

答案 2 :(得分:1)

您的XML文档是有效的实例,有无数的模式。要编写模式,我们需要了解有关有效实例集的更多信息。例如,“在线”和“零售”是type属性的唯一有效值,还是有其他有效值?内容(1234等)怎么样 - 这总是四位数,或者你向我们展示的所有数值都是四位数是纯粹的巧合?

有许多工具可以很好地从单个实例生成模式,但是他们必须猜测上述问题的答案。