我有一个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文档的根元素的属性中.