Alexa666
Alexa666

Reputation: 9

How to build up a xsd from a xml file?

I used some tools to generate a .xsd from my .xml file. But I always get 3. xsd files as Output which reference to each other. I need just one .xsd file, that's why I started to build it up by my own. But I'm quite new to this, so I need your help.

That's my xml file:

    <testxml xmlns="https://localhost:8443/ns0" 
    xmlns:ns7="https://localhost:8443/ns7" 
    xmlns:ns9="https://localhost:8443/ns9" 
    xmlns:ns3="https://localhost:8443/ns3">
        <NotificationMessage>
            <SubscriptionReference>
                <ns3:Address>https://localhost:8443/</ns3:Address>
            </SubscriptionReference>
            <Message>
                <ns9:SubmitObjectsRequest>
                    <ns7:RegistryObjectList>
                        <ns7:ExtrinsicObject>
                            <ns7:Classification>
                                <ns7:Slot name="slot1">
                                    <ns7:ValueList>
                                        <ns7:Value>Slot_1</ns7:Value>
                                    </ns7:ValueList>
                                </ns7:Slot>
                                <ns7:Name>
                                    <ns7:LocalizedString value="Classification Slot_1"/>
                                </ns7:Name>
                            </ns7:Classification>
                            <ns7:ExternalIdentifier>
                                <ns7:Name>
                                    <ns7:LocalizedString value="ExternalIdentifier_1"/>
                                </ns7:Name>
                            </ns7:ExternalIdentifier>
                        </ns7:ExtrinsicObject>
                    </ns7:RegistryObjectList>
                </ns9:SubmitObjectsRequest>
            </Message>
        </NotificationMessage>
    </testxml>

This is the result of "my" xsd file, which I created by myself. I don't really know if I build in the three namespaces correctly. Can anybody tell me if this looks good or if there are many errors? Thank you!

    <?xml version="1.0" encoding="utf-8"?>
    <xs:schema xmlns:ns7="https://localhost:8443/ns7"
       xmlns:ns9="https://localhost:8443/ns9"
       xmlns:ns3="https://localhost:8443/ns3"
       attributeFormDefault="unqualified"
       elementFormDefault="qualified"
       targetNamespace="https://localhost:8443/ns0"
       xmlns:xs="http://www.w3.org/2001/XMLSchema">

      <xs:element name="testxml">
<xs:complexType>
  <xs:sequence>
    <xs:element name="NotificationMessage">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="SubscriptionReference">
            <xs:complexType>
              <xs:sequence>
                <xs:element ref="ns3:Address" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="Message">
            <xs:complexType>
              <xs:sequence>
                <xs:element ref="ns9:SubmitObjectsRequest">

                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="ns9:RegistryObjectList">

                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element ref="ns7:ExtrinsicObject">
                                      <xs:complexType>
                                        <xs:sequence>
                                          <xs:element ref="ns7:Classification">
                                            <xs:complexType>
                                              <xs:sequence>
                                                <xs:element ref="ns7:Slot">
                                                  <xs:complexType>
                                                    <xs:sequence>
                                                      <xs:element ref="ns7:ValueList">
                                                        <xs:complexType>
                                                          <xs:sequence>
                                                            <xs:element ref="ns7:Value"
                                                                        type="xs:string" />
                                                          </xs:sequence>
                                                        </xs:complexType>
                                                      </xs:element>
                                                    </xs:sequence>
                                                    <xs:attribute name="name"
                                                                  type="xs:string"
                                                                  use="required" />
                                                  </xs:complexType>
                                                </xs:element>
                                                <xs:element ref="ns7:Name">
                                                  <xs:complexType>
                                                    <xs:sequence>
                                                      <xs:element ref="ns7:LocalizedString">
                                                        <xs:complexType>
                                                          <xs:attribute name="value"
                                                                        type="xs:string"
                                                                        use="required" />
                                                        </xs:complexType>
                                                      </xs:element>
                                                    </xs:sequence>
                                                  </xs:complexType>
                                                </xs:element>
                                              </xs:sequence>
                                            </xs:complexType>
                                          </xs:element>
                                          <xs:element ref="ns7:ExternalIdentifier">
                                            <xs:complexType>
                                              <xs:sequence>
                                                <xs:element ref="ns7:Name">
                                                  <xs:complexType>
                                                    <xs:sequence>
                                                      <xs:element ref="ns7:LocalizedString">
                                                        <xs:complexType>
                                                          <xs:attribute name="value"
                                                                        type="xs:string"
                                                                        use="required" />
                                                        </xs:complexType>
                                                      </xs:element>
                                                    </xs:sequence>
                                                  </xs:complexType>
                                                </xs:element>
                                              </xs:sequence>
                                            </xs:complexType>
                                          </xs:element>
                                        </xs:sequence>
                                      </xs:complexType>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>

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

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

Upvotes: 0

Views: 172

Answers (2)

Rajeev Patel
Rajeev Patel

Reputation: 11

I use http://www.utilityarena.com/xsdBuilder?initial for converting XMl's to XSD as it has a graphical XSD editor which I have not seen anywhere in free tools. Also It allows you to modify the occurrence etc graphically once your XML is rendered as a graphical XSD tree.

Rendered XML as XSD Tree

Here is the XSD Output It gave me which is perfect

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="https://localhost:8443/ns0" xmlns:ns7="https://localhost:8443/ns7" xmlns:ns9="https://localhost:8443/ns9" xmlns:ns3="https://localhost:8443/ns3">
  <xsd:element id="root" name="testxml">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element id="xsdEl_12" name="NotificationMessage" minOccurs="0" maxOccurs="1">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element id="xsdEl_13" name="SubscriptionReference" minOccurs="0" maxOccurs="1">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element id="xsdEl_14" name="Address" type="xsd:string" minOccurs="0" maxOccurs="1"/>
                  </xsd:sequence>
                </xsd:complexType>
              </xsd:element>
              <xsd:element id="xsdEl_15" name="Message" minOccurs="0" maxOccurs="1">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element id="xsdEl_16" name="SubmitObjectsRequest" minOccurs="0" maxOccurs="1">
                      <xsd:complexType>
                        <xsd:sequence>
                          <xsd:element id="xsdEl_17" name="RegistryObjectList" minOccurs="0" maxOccurs="1">
                            <xsd:complexType>
                              <xsd:sequence>
                                <xsd:element id="xsdEl_18" name="ExtrinsicObject" minOccurs="0" maxOccurs="1">
                                  <xsd:complexType>
                                    <xsd:sequence>
                                      <xsd:element id="xsdEl_19" name="Classification" minOccurs="0" maxOccurs="1">
                                        <xsd:complexType>
                                          <xsd:sequence>
                                            <xsd:element id="xsdEl_20" name="Slot" minOccurs="0" maxOccurs="1">
                                              <xsd:complexType>
                                                <xsd:sequence>
                                                  <xsd:element id="xsdEl_22" name="ValueList" minOccurs="0" maxOccurs="1">
                                                    <xsd:complexType>
                                                      <xsd:sequence>
                                                        <xsd:element id="xsdEl_23" name="Value" type="xsd:string" minOccurs="0" maxOccurs="1"/>
                                                      </xsd:sequence>
                                                    </xsd:complexType>
                                                  </xsd:element>
                                                </xsd:sequence>
                                                <xsd:attribute id="xsdEl_21" name="name" type="xsd:string" use="optional"/>
                                              </xsd:complexType>
                                            </xsd:element>
                                            <xsd:element id="xsdEl_24" name="Name" minOccurs="0" maxOccurs="1">
                                              <xsd:complexType>
                                                <xsd:sequence>
                                                  <xsd:element id="xsdEl_25" name="LocalizedString" type="xsd:string" minOccurs="0" maxOccurs="1"/>
                                                </xsd:sequence>
                                              </xsd:complexType>
                                            </xsd:element>
                                          </xsd:sequence>
                                        </xsd:complexType>
                                      </xsd:element>
                                      <xsd:element id="xsdEl_26" name="ExternalIdentifier" minOccurs="0" maxOccurs="1">
                                        <xsd:complexType>
                                          <xsd:sequence>
                                            <xsd:element id="xsdEl_27" name="Name" minOccurs="0" maxOccurs="1">
                                              <xsd:complexType>
                                                <xsd:sequence>
                                                  <xsd:element id="xsdEl_28" name="LocalizedString" type="xsd:string" minOccurs="0" maxOccurs="1"/>
                                                </xsd:sequence>
                                              </xsd:complexType>
                                            </xsd:element>
                                          </xsd:sequence>
                                        </xsd:complexType>
                                      </xsd:element>
                                    </xsd:sequence>
                                  </xsd:complexType>
                                </xsd:element>
                              </xsd:sequence>
                            </xsd:complexType>
                          </xsd:element>
                        </xsd:sequence>
                      </xsd:complexType>
                    </xsd:element>
                  </xsd:sequence>
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

Regards Rajeev.

Upvotes: 0

Dijkgraaf
Dijkgraaf

Reputation: 11527

Opening your schema up in Visual Studio 2013 with the BizTalk SDK installed I get a warning

Schema warning image

Running the Validate Schema I get two additional warnings

warning BEC999: Namespace 'https://localhost:8443/ns3' is not available to be referenced in this schema.

warning BEC999: Namespace 'https://localhost:8443/ns9' is not available to be referenced in this schema.

error BEC3001: If ref is present, all of , , , , , nillable, default, fixed, form, block, and type must be absent.

Basically the error is telling you that if you have a ref="something" you should then not define it under that element as a complex, but later on as a type.

But I think what you are trying to do is just not supported (see the possible duplicate). You usually define things in a different namespace in a different XSD file as per the three files your tool generated, I got the same result when I generated the schemas from your sample XML, so the output of your tool is correct.

Upvotes: 1

Related Questions