Xml 架构的XSD Include不适用于maxOccurs=";无界的;
在stackoverflow社区的大量帮助下,我正在缓慢但肯定地收集一些XML 我有一些XML的模式,它工作得很好,并且包含很多类型定义。因此,我将模式拆分,将类型定义放在不同的模式中,以便在其他模式中使用它们。如果你跟随;这就是我所做的 这是我的XMLXml 架构的XSD Include不适用于maxOccurs=";无界的;,xml,xsd,Xml,Xsd,在stackoverflow社区的大量帮助下,我正在缓慢但肯定地收集一些XML 我有一些XML的模式,它工作得很好,并且包含很多类型定义。因此,我将模式拆分,将类型定义放在不同的模式中,以便在其他模式中使用它们。如果你跟随;这就是我所做的 这是我的XML <?xml version="1.0" encoding="UTF-8"?> <ns:Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xm
<?xml version="1.0" encoding="UTF-8"?>
<ns:Root
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns="urn:TestNamespace"
xsi:schemaLocation="urn:TestNamespace Test1.xsd"
>
<ns:element1 id="001">
<ns:element2 id="001.1" order="1">
<ns:element3 id="001.1.1" />
</ns:element2>
<ns:element2 id="001.2" order="2">
<ns:element3 id="001.1.2" />
</ns:element2>
</ns:element1>
<ns:element1 id="002">
<ns:element2 id="002.1" order="3">
<ns:element3 id="002.1.1" />
</ns:element2>
<ns:element2 id="002.2" order="4">
<ns:element3 id="002.1.2" />
</ns:element2>
</ns:element1>
</ns:Root>
这是我的XSD
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:TestNamespace"
xmlns:ns="urn:TestNamespace"
elementFormDefault="qualified">
<xsd:include schemaLocation="TestTypes1.xsd"/>
<xsd:element name="Root">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="element1" maxOccurs="unbounded" type="ns:element1Type"/>
</xsd:sequence>
</xsd:complexType>
<xsd:unique name="uniqueElement2OrderInElement1">
<xsd:selector xpath="./ns:element1" />
<xsd:field xpath="ns:element2/@order" />
</xsd:unique>
</xsd:element>
</xsd:schema>
这是我对类型的新模式,这里定义的元素直接从上面的模式复制而来
<?xml version="1.0"?>
<xsd:schema version="1.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:TestNamespace"
xmlns:ns="urn:TestNamespace"
elementFormDefault="unqualified">
<xsd:complexType name="element1Type">
<xsd:sequence>
<xsd:element name="element2" maxOccurs="unbounded" type="ns:element2Type"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="element2Type">
<xsd:sequence>
<xsd:element name="element3" type="ns:element3Type" />
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" />
<xsd:attribute name="order" type="xsd:string" />
</xsd:complexType>
<xsd:complexType name="element3Type">
<xsd:attribute name="id" type="xsd:string"/>
</xsd:complexType>
</xsd:schema>
当我现在尝试验证我的XML时,我得到了这个错误
cvc复杂类型.2.4.a:发现以元素“ns:element2”开头的内容无效。应为“{element2}”中的一个。[9]
cvc复杂类型.2.4.a:发现以元素“ns:element2”开头的内容无效。应为“{element2}”中的一个。[17]
其中第9行和第17行涉及每个“元素1”中第一个“元素2”的开口。正如我所说的,在我把它们分开之前,这是有效的,所以我想现在我肯定丢失了一些东西,或者无法将一些东西从一个转换到另一个。它似乎在抱怨它需要一个'element2',即使我删除'element2'的第二个实例之一,我也会得到同样的错误。元素的属性似乎是正确的,因为它允许无限次的出现
我想我看错了错误
一如既往,我们非常感谢您的任何帮助或指导。提前感谢我想你应该把
elementFormDefault=“qualified”
而不是elementFormDefault=“qualified”放在类型模式中,因为它在主xsd中是限定的,在xml中也是限定的。我从一个网站上盲目复制了这个部分,没有意识到我复制了什么。非常感谢,这是一种享受:-)