2014-02-18 37 views
1

我想在我的XML模式引入有条件的必填字段,但我得到一个错误,XS:断言是无效的上下文...任何建议,以帮助吗?XML XS ::断言复合型

其他信息:我使用的Xerces 3.11(C++)来解析XML)

<?xml version="1.0" encoding="iso-8859-1" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="configuration" type="configurationType"/> 

    <xs:complexType name="configurationType"> 
    <xs:sequence> 
     <xs:element name="application" minOccurs="1" maxOccurs="unbounded" type="appType" /> 
     <xs:element name="command" minOccurs="1" maxOccurs="unbounded" type="commandType"/> 
    </xs:sequence> 
    </xs:complexType> 


    <xs:complexType name="appType"> 
    <xs:attribute name="name" type="xs:string" use="required" /> 
    <xs:attribute name="hostname" type="xs:string" use="required" /> 
    <xs:attribute name="port" type="xs:positiveInteger" use="required" /> 
    <xs:attribute name="group" type="xs:string" use="required" /> 
    <xs:assert test="@hostname or @port != 4"/> 
    </xs:complexType> 

    <xs:complexType name="commandType"> 
    <xs:attribute name="name" type="xs:string" use="required" /> 
    <xs:attribute name="target" type="xs:string" use="required" /> 
    <xs:attribute name="parameter" type="xs:string" use="optional" /> 
    </xs:complexType> 

</xs:schema> 

回答

2

的Xerces 3.1.1 C++不支持XSD 1.1。这是根本原因。

Xerces-J的XSDL 1.1实验处理器是introduced(从Java 2.10.0开始)。

+0

谢谢,使有很大的意义。 –