Xml 我可以重新定义XSD模式来更改类型的子级的maxOccurs属性吗?
我试图扩展XML模式,以更改子元素在元素下出现的次数 在原始架构中,父类型定义如下:Xml 我可以重新定义XSD模式来更改类型的子级的maxOccurs属性吗?,xml,xsd,Xml,Xsd,我试图扩展XML模式,以更改子元素在元素下出现的次数 在原始架构中,父类型定义如下: <xsd:complexType name="CrimeLineBusiness_Type"> <xsd:complexContent> <xsd:extension base="PCLINEBUSINESS"> <xsd:sequence> <xsd:element ref="
<xsd:complexType name="CrimeLineBusiness_Type">
<xsd:complexContent>
<xsd:extension base="PCLINEBUSINESS">
<xsd:sequence>
<xsd:element ref="CrimeSchedule" minOccurs="0"/>
<xsd:element ref="CrimeMoneyAndSecurities" minOccurs="0"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
但是,我得到了以下错误:
cos nonambig:CrimeSchedule和CrimeSchedule(或其取代基中的元素)违反了“唯一粒子属性”。
在根据该模式进行验证期间,将为这两个粒子创建歧义
这是有意义的,因为这些子项确实是在原始模式中定义的。那么,我怎样才能完成我需要做的事情呢
谢谢 当您进行扩展时,新类型的内容模型是基本内容模型的序列,以及您在新类型中添加的任何内容。例如,在您的案例中,重新定义的CrimeLineBusiness_类型的内容模型是
<xsd:sequence>
<xsd:sequence>
<xsd:element ref="CrimeSchedule" minOccurs="0"/>
<xsd:element ref="CrimeMoneyAndSecurities" minOccurs="0"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element ref="CrimeMoneyAndSecurities" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="CrimeSchedule" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:sequence>
你可以尝试实现你想要的是对这种类型的双重重新定义。首先,通过限制重新定义它,删除可选的CrimeSchedule和CrimeMoneyandSecurity元素,然后通过扩展以所需的出现次数再次添加这些元素。请参阅下面的完整工作示例:
text.xsd
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="test" type="CrimeLineBusiness_Type"/>
<xsd:complexType name="PCLINEBUSINESS"/>
<xsd:element name="CrimeSchedule"/>
<xsd:element name="CrimeMoneyAndSecurities"/>
<xsd:complexType name="CrimeLineBusiness_Type">
<xsd:complexContent>
<xsd:extension base="PCLINEBUSINESS">
<xsd:sequence>
<xsd:element ref="CrimeSchedule" minOccurs="0"/>
<xsd:element ref="CrimeMoneyAndSecurities" minOccurs="0"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>
redef1.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:redefine schemaLocation="test.xsd">
<xs:complexType name="CrimeLineBusiness_Type">
<xs:complexContent>
<xs:restriction base="CrimeLineBusiness_Type">
<xs:sequence/>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
</xs:redefine>
</xs:schema>
redef2.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:redefine schemaLocation="redef1.xsd">
<xs:complexType name="CrimeLineBusiness_Type">
<xs:complexContent>
<xs:extension base="CrimeLineBusiness_Type">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="CrimeSchedule"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="CrimeMoneyAndSecurities"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:redefine>
</xs:schema>
有效的XML实例test.XML
<?xml version="1.0" encoding="UTF-8"?>
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="redef2.xsd">
<CrimeSchedule></CrimeSchedule>
<CrimeSchedule></CrimeSchedule>
<CrimeMoneyAndSecurities></CrimeMoneyAndSecurities>
<CrimeMoneyAndSecurities></CrimeMoneyAndSecurities>
</test>
问候,,
乔治伟大的解释和解决方案乔治!在看到一些关于XSD被投票并被提问者接受的错误答案后,我开始对它失去信心。我来到这里是为了寻找“我可以通过重新定义删除一个孩子吗?”的答案,但我认为乔治的答案也间接地涵盖了这一点,回答是“不,不能不使用与上述类似的模式”。
<?xml version="1.0" encoding="UTF-8"?>
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="redef2.xsd">
<CrimeSchedule></CrimeSchedule>
<CrimeSchedule></CrimeSchedule>
<CrimeMoneyAndSecurities></CrimeMoneyAndSecurities>
<CrimeMoneyAndSecurities></CrimeMoneyAndSecurities>
</test>