如何为这个xml定义xsd

时间:2013-06-26 11:46:45

标签: xml xsd

我正在尝试为我的xml定义一些xsd文档。

但我是新手,经过一番尝试后感到困惑。

我的xml:

<?xml version="1.0" encoding="utf-8"?>
<mashhadhost xmlns="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3schools.com mhost.xsd">
    <create>
        <name>example.ir</name>
        <period>60</period>
        <ns>
            <hostAttr>
                <hostName>ns1.example.ir</hostName>
                <hostAddr ip="v4">192.0.2.2</hostAddr>
            </hostAttr>
        </ns>
        <contact type="holder">ex61-irnic</contact>
        <contact type="admin">ex61-irnic</contact>
        <contact type="tech">ex61-irnic</contact>
        <contact type="bill">ex61-irnic</contact>
    </create>
    <auth>
        <code>TOKEN</code>
    </auth>
</mashhadhost>

您可以看到有<create><auth>个孩子。

需要1- <auth> - &gt; <code>也是必需的,代码是32长度字符串。

2- <create>可以替换为<update><delete>

3- <hostAttr>可重复2-4次。

4- <contact>必须使用确切的属性重复4次。

这是我的尝试,但那里有很多漏洞。

<?xml version="1.0"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">


    <xs:element name="mashhadhost">
        <xs:complexType>
            <xs:sequence>


                <xs:element name="create">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="name" type="xs:string"/>
                            <xs:element name="period" type="xs:string"/>

                            <xs:element name="ns"/>

                            <xs:element name="contact" type="xs:string"/>

                        </xs:sequence>
                    </xs:complexType>
                </xs:element>


                <xs:element name="auth">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="code" type="xs:string"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>


            </xs:sequence>
        </xs:complexType>
    </xs:element> 



</xs:schema> 

1 个答案:

答案 0 :(得分:1)

我已根据您的要求创建了XSD。我已经使用这个online validator来根据模式验证xml。干杯!!!

    <?xml version="1.0" encoding="utf-8"?>
<xs:schema id="mashhadhost" targetNamespace="http://www.w3schools.com" xmlns:mstns="http://www.w3schools.com" xmlns="http://www.w3schools.com" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified">
 <xs:complexType name="bodyType" mixed="true">
            <xs:sequence>
              <xs:element name="name" type="xs:string" minOccurs="0" />
              <xs:element name="period" type="xs:string" minOccurs="0" />
              <xs:element name="ns" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="hostAttr" minOccurs="2" maxOccurs="4">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="hostName" type="xs:string" minOccurs="1" />
                          <xs:element name="hostAddr" nillable="true" minOccurs="1">
                            <xs:complexType>
                              <xs:simpleContent msdata:ColumnName="hostAddr_Text" msdata:Ordinal="1">
                                <xs:extension base="xs:string">
                                  <xs:attribute name="ip" form="unqualified" type="xs:string" />
                                </xs:extension>
                              </xs:simpleContent>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="contact" minOccurs="4" maxOccurs="4">
                <xs:complexType>
                  <xs:simpleContent msdata:ColumnName="contact_Text" msdata:Ordinal="1">
                    <xs:extension base="xs:string">
                      <xs:attribute name="type" form="unqualified" type="xs:string" />
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
  <xs:element name="mashhadhost">
    <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="create" type="bodyType"/>
        <xs:element name="udpate" type="bodyType"/>
        <xs:element name="delete" type="bodyType"/>
        <xs:element name="auth">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="code" minOccurs="0" >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                    <xs:length value="32"/>
                </xs:restriction>
                </xs:simpleType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
    </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>