从XSD文件创建架构并验证它时出错

时间:2017-06-08 16:50:21

标签: sql-server xml xsd

这是我的Xml文件

<Test>
 <Detail>
  <name id="123" age="1">Abc</name>
  <lastname>cd</lastname>
 </Detail>
</Test>

这是我的对应XSD文件,可以使用http://xmlgrid.net/xml2xsd.html

生成
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
          <!-- XML Schema Generated from XML Document on Thu Jun 08 2017 22:08:05 GMT+0530 (India Standard Time) -->
          <!-- with XmlGrid.net Free Online Service http://xmlgrid.net -->
       <xs:element name="Test">
              <xs:complexType>
                     <xs:sequence>
                            <xs:element name="Detail">
                                   <xs:complexType>
                                          <xs:sequence>
                                                 <xs:element name="name" type="xs:string">
                                                        <xs:complexType>
                                                               <xs:attribute name="id" type="xs:int"></xs:attribute>
                                                               <xs:attribute name="age" type="xs:int"></xs:attribute>
                                                           </xs:complexType>
                                                    </xs:element>
                                                 <xs:element name="lastname" type="xs:string"></xs:element>
                                             </xs:sequence>
                                      </xs:complexType>
                               </xs:element>
                        </xs:sequence>
                 </xs:complexType>
          </xs:element>
   </xs:schema>

当我尝试在SQL Server中创建Schema时

CREATE XML SCHEMA COLLECTION TestSchema 
AS'<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
          <!-- XML Schema Generated from XML Document on Thu Jun 08 2017 22:08:05 GMT+0530 (India Standard Time) -->
          <!-- with XmlGrid.net Free Online Service http://xmlgrid.net -->
       <xs:element name="Test">
              <xs:complexType>
                     <xs:sequence>
                            <xs:element name="Detail">
                                   <xs:complexType>
                                          <xs:sequence>
                                                 <xs:element name="name" type="xs:string">
                                                        <xs:complexType>
                                                               <xs:attribute name="id" type="xs:int"></xs:attribute>
                                                               <xs:attribute name="age" type="xs:int"></xs:attribute>
                                                           </xs:complexType>
                                                    </xs:element>
                                                 <xs:element name="lastname" type="xs:string"></xs:element>
                                             </xs:sequence>
                                      </xs:complexType>
                               </xs:element>
                        </xs:sequence>
                 </xs:complexType>
          </xs:element>
   </xs:schema>'

我收到错误

Msg 2305, Level 16, State 1, Line 1
Element or attribute type specified more than once. Location: '/*:schema[1]/*:element[1]/*:
complexType[1]/*:sequence[1]/*:element[1]/*:
complexType[1]/*:sequence[1]/*:element[1]/*:
complexType[1]'.

当我删除&lt; xs:element name =“name”type =“xs:string”&gt;中的 type =“xs:string”时我可以成功创建我的架构而不会出错。

但是在验证我的架构时,我得到了错误

declare @x XML(TestSchema)

begin try
select @x='<?xml version="1.0" encoding="utf-8"?>
<Test>
<Detail>
<name id="123" age="1">Abc</name>
<lastname>cd</lastname>
</Detail>
</Test>'
end try
begin catch
print Error_Message()
end catch

enter image description here

任何人都可以帮我解决这个问题吗?

提前致谢,Jayendran

1 个答案:

答案 0 :(得分:0)

在XSD中,您可以使用xs:complexTypexs:simpleContent来同时允许同一元素的属性和内容:

<xs:element name="name">
    <xs:complexType>
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="id" type="xs:int"></xs:attribute>
                <xs:attribute name="age" type="xs:int"></xs:attribute>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element>