【问题标题】:How to build up a xsd from a xml file?如何从 xml 文件构建 xsd?
【发布时间】:2019-01-07 08:18:55
【问题描述】:

我使用一些工具从我的 .xml 文件生成 .xsd。但我总是得到 3.xsd 文件作为相互引用的输出。我只需要一个 .xsd 文件,这就是我开始自己构建它的原因。但我对此很陌生,所以我需要你的帮助。

这是我的 xml 文件:

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

这是我自己创建的“我的”xsd 文件的结果。我真的不知道我是否正确构建了三个命名空间。谁能告诉我这看起来不错还是有很多错误?谢谢!

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

【问题讨论】:

标签: xml xsd


【解决方案1】:

在安装了 BizTalk SDK 的 Visual Studio 2013 中打开您的架构我收到警告

运行 Validate Schema 我收到两个额外的警告

警告 BEC999:命名空间“https://localhost:8443/ns3”不可在此架构中引用。

警告 BEC999:命名空间“https://localhost:8443/ns9”不可在此架构中引用。

error BEC3001: 如果 ref 存在,所有 , , , , , nillable, default, fixed, form, block 和 type 都必须不存在。

基本上,错误告诉您,如果您有一个 ref="something",那么您不应该在该元素下将其定义为复合体,而是稍后定义为类型。

但我认为您正在尝试做的事情不受支持(请参阅可能的duplicate)。您通常根据您的工具生成的三个文件在不同的 XSD 文件中定义不同命名空间中的内容,当我从您的示例 XML 生成架构时得到相同的结果,因此您的工具的输出是正确的。

【讨论】:

  • 您好,感谢您的帮助!难道不能在一个 xsd 中使用不同的命名空间吗?
  • @Alexa666 不客气。请查看可能重复的答案,答案是否定的,您必须在单独的 XSD 中定义每个命名空间并将它们导入另一个 XSD。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-17
  • 2012-10-05
相关资源
最近更新 更多