【问题标题】:Specify namespace for an element in XSD为 XSD 中的元素指定命名空间
【发布时间】:2014-08-20 07:16:59
【问题描述】:

我有一个需要为其生成 XSD 的 XML。我的 XML 如下:

实例:

    <mes:GetInboundResponseGetInboundSMS 
          xmlns:mes="http://abcd.com">
         <response>
            <messages>
               <item>
                  <date>15/04/2014 00:00:00</date>
               </item>
               <item>
                  <date>01/07/2014 10:01:32</date>
               </item>
            </messages>
         </response>
    </mes:GetInboundResponseGetInboundSMS>

请注意,只有最外层的元素 GetInboundResponseGetInboundSMS 属于命名空间 http://abcd.com - 其余元素不属于。如何在 XSD 中指定它?

我已尝试使用以下 XSD,但这给了我错误:

XSD:

<xs:schema attributeFormDefault="unqualified" 
           elementFormDefault="qualified" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema">

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

<xs:element name="response">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="messages">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="item" 
                          maxOccurs="unbounded" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element type="xs:string" name="date"/>
                  </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>

但是当我尝试使用在线验证器通过 XSD 验证实例时,我遇到了这个错误:

无效。
错误 - 第 1、95 行:org.xml.sax.SAXParseException;行号:1;列号:95; cvc-elt.1:找不到元素“mes:GetInboundResponseGetInboundSMS”的声明。

这是合乎逻辑的,因为我没有在 XSD 中提供命名空间。请帮助我了解如何仅为我的 XSD 中的最外层元素提供此命名空间。

【问题讨论】:

    标签: xml xsd xsd-validation


    【解决方案1】:

    你有两件事不是你想要的。

    • 您希望 GetInboundResponseGetInboundSMS 元素位于命名空间 http://abcd.com

      所以将targetNamespace="http://abcd.com" 添加到您的架构元素中。

    • 您希望该元素的子元素(它们都被声明为 GetInboundResponseGetInboundSMS 元素的匿名复杂类型的本地元素)是不合格的。

      因此将架构元素上的elementFormDefault="qualified" 更改为elementFormDefault="unqualified"

    架构文档的开始标签应如下所示:

    <xs:schema targetNamespace="http://abcd.com"
               attributeFormDefault="unqualified" 
               elementFormDefault="unqualified" 
               xmlns:xs="http://www.w3.org/2001/XMLSchema">
    

    【讨论】:

      猜你喜欢
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多