我有一个 XML,需要为其生成 XSD。我的 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 中的最外部元素提供此命名空间。
有两件事并不完全是你想要的。
-
您希望 GetInboundResponseGetInboundSMS 元素位于命名空间中http://abcd.com http://abcd.com.
So add targetNamespace="http://abcd.com"
到您的架构元素。
-
您希望该元素的子元素(全部声明为 GetInboundResponseGetInboundSMS 元素的匿名复杂类型的本地元素)是非限定的。
所以改变elementFormDefault="qualified"
在 schema 元素上elementFormDefault="unqualified"
.
架构文档的开始标签应如下所示:
<xs:schema targetNamespace="http://abcd.com"
attributeFormDefault="unqualified"
elementFormDefault="unqualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)