我有一个xsd,它有3个导入到另一个xsd,8个复杂类型和3个简单类型。
现在我必须只处理1个compex类型,它继承了许多其他XSD - 主要是当前xsd所拥有的3个进口。
我将仅获得仅包含1种复杂类型的XML文件,我已经提到过。
现在我正在尝试生成包含根据单一复杂类型的数据的示例XML文件,并尝试验证它,但是当我尝试使用XMLSpy或OxygenXML时,它表示没有定义根节点。
现在,当我尝试定义根节点时,它不允许我这样做,如果我尝试为这个复杂类型创建另一个xsd,它也会给我一些错误,因为这个复杂类型指向的是继承的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继续,因为它有许多更复杂的类型和简单类型。任何指导都将受到高度赞赏。
答案 0 :(得分:1)
您发布的架构文件仅显示complexType
个定义。要验证XML文档,您应该在顶层具有与文档根元素匹配的element
声明。如果您的架构(或其中一个导入的架构)具有此类架构,请发布该部分以及您尝试验证的简短XML文档。
验证模式的“部分”没有问题。顶级的任何element
声明都可以作为经过验证的XML文档的根元素,因为XML Schema没有定义根元素的概念(与DTD和RELAX NG不同,后者更加面向文档)。 / p>
如果您可以控制XML文档,还可以尝试将xsi:type
属性附加到根元素,以指示您要验证的complexType
。所以你会添加像
xsi:type="firstcomplextype" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
在XML文档的根元素的属性中。
答案 1 :(得分:0)
您需要在架构中添加一个元素,该元素具有您要使用的复杂类型。元素声明如下所示:
代码:全选
<xs:element name="newElement" type="thirdComplexType"/>
您可以直接在当前架构中声明您的元素(您举例说明的那个),或者您可以创建一个新架构,导入当前架构并在那里声明元素。
生成的XML文件将针对复杂类型“thirdComplexType”进行验证,因为它将以“newElement”作为根元素。换句话说,XML文件会自动针对XSD的某些部分进行验证。
您可以在此处阅读有关XML Schema的更多信息: