我有一个xsd,它有3个导入到另一个xsd,8个复杂类型和3个简单类型.
现在,我必须只处理1个compex类型,这反过来继承了许多其他XSD – 主要是当前xsd所具有的3个进口.
我将仅获得仅包含1种复杂类型的XML文件,我已经提到过.
现在我正在尝试生成包含根据单一复杂类型的数据的示例XML文件,并且我正在尝试验证它,但是当我尝试使用XMLSpy或OxygenXML时,它表示没有定义根节点.
现在,当我尝试定义根节点时,它不允许我这样做,如果我尝试为这个复杂类型创建另一个xsd,它也会给我一些错误,因为这个复杂类型在初始xsd中指向的是继承的xsd我没有在新的工作中工作,我尝试继承3 xsd,复杂类型指向新xsd中的初始xsd,但仍然无法正常工作.
另外我的另一个问题是 – 与完整的XSD相比,我们是否可以针对XSD的某些部分验证XML文件,因为根据XSD中的1个复杂元素类型,XML得到的是什么?
初始XSD的格式:
- <?xml version="1.0" encoding="UTF-8"?>
- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:schema location targetNamespace=targetnamespace elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.652">
- <xs:import namespace=first xsd which is imported>
- <xs:import namespace=second xsd which is imported>
- <xs:import namespace=third xsd which is imported>
- <xs:complexType name="firstcomplextype" abstract="false">
- <xs:sequence>
- <xs:element name="some value" type="xs:string" minOccurs="0"/>
- <xs:element name="some value" type="some value"/>
- <xs:element name="some value" type="xs:string" minOccurs="0"/>
- </xs:sequence>
- <xs:attribute name="some value" type="xs:int" use="required"/>
- <xs:attribute name="some value" type="xs:value" use="required"/>
- <xs:attribute name="some value" type="xs:int" use="required"/>
- </xs:complexType>
- <xs:complexType name="second complex type" abstract="false">
- <xs:sequence>
- <xs:element name="some value" type="xs:some value" minOccurs="0"/>
- <xs:element name="some value" type="xs:some value" minOccurs="0"/>
- <xs:element name="some value" type="some value"/>
- <xs:element name="some value" type="some value"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="third complex type**I need to work with only this complex type and xml file will contain data according to this complex type only and I need to validate incoming XML against only this complex type**" abstract="false">
- <xs:sequence>
- <xs:element name="some value" minOccurs="0">
- <xs:complexType>
- <xs:sequence>
- <xs:element name="some value" type="some value" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- <xs:element name="some value" type="some value"/>
- <xs:element name="some value" minOccurs="0">
- <xs:complexType>
- <xs:sequence>
- <xs:element name="some value" type="some value" minOccurs="0" maxOccurs="unbounded"/>---**Here this particular element points to another XSD,one of the imported XSD's**
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- <xs:sequence minOccurs="0">
- <xs:element name="some value" type="xs:some value" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="some value" minOccurs="0">
- <xs:complexType>
- <xs:sequence>
- <xs:element name="some value" type="some value" minOccurs="0" maxOccurs="unbounded"/>---**Here this particular element points to another XSD,one of the imported XSD's**
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- </xs:sequence>
- <xs:sequence minOccurs="0">
- <xs:element name="some value" type="xs:some value" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="some value" minOccurs="0">
- <xs:complexType>
- <xs:sequence>
- <xs:element name="some value" type="some value" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- </xs:sequence>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="4th complex type" abstract="false">
- <xs:sequence>
- <xs:element name="elements">
- <xs:complexType>
- <xs:sequence>
- <xs:element name="some value" type="some value" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- </xs:sequence>
- </xs:complexType>
并且xsd继续,因为它有许多更复杂的类型和简单类型.任何指导都将受到高度赞赏.
您发布的模式文件仅显示complexType定义.要验证XML文档,您应该在顶层具有与文档的根元素匹配的元素声明.如果您的架构(或其中一个导入的架构)具有此类架构,请发布该部分以及您尝试验证的简短XML文档.
验证模式的“部分”没有问题.顶级的任何元素声明都可以作为经过验证的XML文档的根元素,因为XML Schema没有定义根元素的概念(与DTD和RELAX NG不同,后者更加面向文档).
如果您可以控制XML文档,还可以尝试将xsi:type属性附加到根元素以指示要对其进行验证的complexType.所以你会添加类似的东西
- xsi:type="firstcomplextype" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
在XML文档的根元素的属性中.