我有像这样的xml文件
<?xml version="1.0" encoding="UTF-8"?>
<specification xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="file://Desktop/normal.xsd">
<university>
<refstr>bdvl_te_skrm_stc</refstr>
<ref_complete_customer path="/work/bsr.xml"/>
<Code>A0f11478</Code>
<Area>sku</Area>
<started>1987</started>
<branch>
<electronics>
<students Nr="120" ece="ab">
<student Name="svr" year="2010" rank="3"/>
<student Name="bvr" year="2010" rank="1"/>
</students>
</electronics>
</branch>
<semister>
<semister num="3"/>
<extrainfo/>
</semister>
<address>
<extrainfo> some data.
</extrainfo>
</address>
</university>
</specification>
此xml文件的genarated xsd架构是
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wmh="http://www.wmhelp.com/2003/eGenerator" elementFormDefault="qualified">
<xs:element name="specification">
<xs:complexType>
<xs:sequence>
<xs:element ref="university"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="university">
<xs:complexType>
<xs:sequence>
<xs:element ref="refstr"/>
<xs:element ref="ref_complete_customer"/>
<xs:element ref="Code"/>
<xs:element ref="Area"/>
<xs:element ref="started"/>
<xs:element ref="branch"/>
<xs:element ref="semister"/>
<xs:element ref="address"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="refstr" type="xs:string"/>
<xs:element name="ref_complete_customer">
<xs:complexType>
<xs:attribute name="path" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Code" type="xs:string"/>
<xs:element name="Area" type="xs:string"/>
<xs:element name="started" type="xs:string"/>
<xs:element name="branch">
<xs:complexType>
<xs:sequence>
<xs:element ref="electronics"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="electronics">
<xs:complexType>
<xs:sequence>
<xs:element ref="students"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="students">
<xs:complexType>
<xs:sequence>
<xs:element ref="student" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="Nr" type="xs:string" use="required"/>
<xs:attribute name="ece" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="student">
<xs:complexType>
<xs:attribute name="Name" type="xs:string" use="required"/>
<xs:attribute name="year" type="xs:string" use="required"/>
<xs:attribute name="rank" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="semister">
<xs:complexType>
<xs:sequence>
<xs:element ref="semister"/>
<xs:element ref="extrainfo"/>
</xs:sequence>
<xs:attribute name="num" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="extrainfo" type="xs:string"/>
<xs:element name="address">
<xs:complexType>
<xs:sequence>
<xs:element ref="extrainfo"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
但是当我验证这种类型的xml时,它会给出这样的错误
“element university {}具有无效的架构定义结构。此错误显示在大学节点的”address element“中。”
我无法纠正此错误,任何人都可以告诉我如何修改此错误。我应该在架构中更改什么。当我验证架构时,它没有错误。
提前致谢。
答案 0 :(得分:3)
如果我通过使用提供的XML Schema进行验证来运行XML,我认为address
元素没有任何问题。但是,在您的架构中,semister
元素定义引用自身。由于它没有指定最小出现次数,因此默认值为1.这有效地创建了无限递归的要求。考虑像这样更改XML Schema ......
<xs:element name="semister">
<xs:complexType>
<xs:sequence>
<xs:element ref="semister" minOccurs="0"/>
<xs:element ref="extrainfo" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="num" type="xs:string"/>
</xs:complexType>
</xs:element>
或者看起来像是一个不会强制无限递归的适当约束。
答案 1 :(得分:0)
您的问题在于 semister 元素定义。这是一个不可能的递归定义。
<xs:element name="semister">
<xs:complexType>
<xs:sequence>
<xs:element ref="semister"/>
<xs:element ref="extrainfo"/>
</xs:sequence>
<xs:attribute name="num" type="xs:string"/>
</xs:complexType>
</xs:element>
下面的XML无效,因为内部semister元素无效,因为它不包含semister和extrainfo元素。
<semister>
<semister num="3"/>
<extrainfo/>
</semister>