XSD不针对xml进行验证
问题描述:
我是XSD的新手,无法弄清楚为什么我的XSD无法验证。我收到以下错误:XSD不针对xml进行验证
s4s-elt-invalid-content.1:'parametersInfo'的内容无效。元素“complexType”无效,错位或发生频率过高。
cvc-complex-type.2.4.d:从元素'exception'开始找到无效内容。预计在这一点上不会有子元素。
XML:
<?xml version="1.0" encoding="UTF-8"?>
<service id="IServiceREST">
<inherit>
<parent>Remote</parent>
</inherit>
<package>com.module</package>
<include>java.rmi.Remote</include>
<include>java.net.*</include>
<include>java.io.*</include>
<abstract_method id="getContent">
<visibility>public</visibility>
<parameters>
<argument type="URL">url</argument>
<argument type="int">timeout</argument>
</parameters>
<throw>
<exception>MalformedURLException</exception>
<exception>IOException</exception>
</throw>
<return>String</return>
</abstract_method>
<abstract_method id="deleteUser">
<visibility>public</visibility>
<parameters>
<argument type="String">username</argument>
</parameters>
<return>void</return>
</abstract_method>
</service>
XSD:
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="serviceInfo">
<xs:sequence>
<xs:element name="inherit" type="inheritInfo" minOccurs="1" maxOccurs="unbounded"/>
<xs:element name="package" type="xs:string" />
<xs:element name="include" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="abstract_method" type="abstract_methodInfo" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute type="xs:string" name="id" />
</xs:complexType>
<xs:complexType name="inheritInfo">
<xs:sequence>
<xs:element type="xs:string" name="parent" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="abstract_methodInfo">
<xs:sequence>
<xs:element type="xs:string" name="visibility" minOccurs="0" maxOccurs="1"/>
<xs:element type="parametersInfo" name="parameters" />
<xs:element type="throwInfo" name="throw" minOccurs="0" maxOccurs="unbounded"/>
<xs:element type="xs:string" name="return" minOccurs="1" />
</xs:sequence>
<xs:attribute type="xs:string" name="id" />
</xs:complexType>
<xs:complexType name="throwInfo">
<xs:sequence>
<xs:element type="xs:string" name ="exception" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="parametersInfo">
<xs:complexType type="xs:string" name="argument">
<xs:sequence>
<xs:element name="URL" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="timeout" type="xs:integer" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:complexType>
<xs:element name="service" type="serviceInfo"/>
</xs:schema>
我这么想吗?我想让它更容易使用复杂的类型和引用它们进行分解...
答
你parametersInfo
类型的声明指出
<xs:complexType name="parametersInfo">
<xs:complexType type="xs:string" name="argument">
<xs:sequence>
<xs:element name="URL" type="xs:string"
minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="timeout" type="xs:integer"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:complexType>
的XSD complexType
元素不能显示为complexType
一个孩子。我不知道你在做什么,但这不是做到这一点的方法。
您可能需要完成一个或两个XSD教程。