2014-02-18 36 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

謝謝,使有很大的意義。 –