[xsde-users] Valid but XSD/e reports unexpected element

Kjell Svensson iftroja at live.com
Sat May 8 11:04:18 EDT 2010


Hello

I have created a schema and an xml document in Altova xmlspy. 
XMLSpy reports that the xml document is okay and valid against the schema, but xsd/e reports 
~\cxx\hybrid\hello\hello3.xml:5:77: unexpected element encountered

I have tried to remove the schema location etc in the XML doc without success.

What I'm I doing wrong?

This is my schema:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.example.org/iosystem" targetNamespace="http://www.example.org/iosystem" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <!-- Link ref -->
    <xs:complexType name="LinkType">
        <xs:attribute name="href" type="xs:string"/>
    </xs:complexType>
    <!-- UserDef -->
    <xs:simpleType name="UserdefType">
        <xs:restriction base="xs:string"/>
    </xs:simpleType>
    <!-- Status sent in all replies -->
    <xs:group name="Status">
        <xs:sequence>
            <xs:element name="RetCode" type="xs:long"/>
            <xs:element name="ErrStr" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:group>
    <xs:complexType name="StatusType">
        <xs:group ref="tns:Status"/>
    </xs:complexType>
    <!-- Quality -->
    <xs:simpleType name="QualityType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Good"/>
            <xs:enumeration value="Bad"/>
            <xs:enumeration value="Undefined"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- Access level -->
    <xs:simpleType name="AccessLevelSimpleType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="None"/>
            <xs:enumeration value="Rapid"/>
            <xs:enumeration value="LocalManual"/>
            <xs:enumeration value="LocalAuto"/>
            <xs:enumeration value="RemoteManual"/>
            <xs:enumeration value="RemoteAuto"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:group name="AcessLevel">
        <xs:sequence>
            <xs:element name="AccessLevel" type="tns:AccessLevelSimpleType" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:group>
    <xs:complexType name="AccessLevelType">
        <xs:group ref="tns:AcessLevel"/>
    </xs:complexType>
    <!-- Runtime configuration-->
    <xs:group name="RunTimeConfiguration">
        <xs:sequence>
            <xs:element name="SignalBits" type="xs:int"/>
        </xs:sequence>
    </xs:group>
    <xs:complexType name="RunTimeConfigurationType">
        <xs:group ref="tns:RunTimeConfiguration"/>
    </xs:complexType>
    <!-- Runtime configuration-->
    <xs:group name="GeneralConfiguration">
        <xs:sequence>
            <xs:element name="SignalLabel" type="xs:string"/>
            <xs:element name="UnitMap" type="xs:int"/>
            <xs:element name="Category" type="xs:string"/>
            <xs:element name="Access" type="xs:string"/>
            <xs:element name="Default" type="xs:double"/>
            <xs:element name="FiltPas" type="xs:int"/>
            <xs:element name="FiltAct" type="xs:int"/>
            <xs:element name="Invert" type="xs:boolean"/>
            <xs:element name="EncType" type="xs:string"/>
            <xs:element name="MaxLog" type="xs:double"/>
            <xs:element name="MaxPhys" type="xs:double"/>
            <xs:element name="MaxPhysLimit" type="xs:double"/>
            <xs:element name="MaxBitVal" type="xs:int"/>
            <xs:element name="MinLog" type="xs:double"/>
            <xs:element name="MinPhys" type="xs:double"/>
            <xs:element name="MinPhysLimit" type="xs:double"/>
            <xs:element name="MinBitVal" type="xs:int"/>
            <xs:element name="SysfailReset" type="xs:boolean"/>
        </xs:sequence>
    </xs:group>
    <xs:complexType name="GeneralConfigurationType">
        <xs:group ref="tns:GeneralConfiguration"/>
    </xs:complexType>
    <!-- IO Signal types -->
    <xs:simpleType name="SignalType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="DI"/>
            <xs:enumeration value="DO"/>
            <xs:enumeration value="GI"/>
            <xs:enumeration value="GO"/>
            <xs:enumeration value="AI"/>
            <xs:enumeration value="AO"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- data types with a link -->
    <xs:complexType name="DoubleValueType">
        <xs:sequence>
            <xs:element name="Value" type="xs:double"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="IntValueType">
        <xs:sequence>
            <xs:element name="Value" type="xs:int"/>
        </xs:sequence>
    </xs:complexType>
    <!-- Signal value type -->
    <xs:group name="SignalValue">
        <xs:choice>
            <xs:element name="Analog" type="tns:DoubleValueType"/>
            <xs:element name="Digital" type="tns:IntValueType"/>
        </xs:choice>
    </xs:group>
    <xs:complexType name="SignalValueType">
        <xs:sequence>
            <xs:element name="Time" type="xs:long"/>
            <xs:group ref="tns:SignalValue"/>
            <xs:element name="Quality" type="tns:QualityType"/>
        </xs:sequence>
    </xs:complexType>
    <!-- Signal state -->
    <xs:simpleType name="SignalStatesType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Blocked"/>
            <xs:enumeration value="Unblocked"/>
            <xs:enumeration value="Unknown"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="SignalStateType">
        <xs:sequence>
            <xs:element name="State" type="tns:SignalStatesType"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="IOSignalCurrentValueType">
        <xs:sequence>
            <xs:element name="State" type="tns:SignalStatesType"/>
            <xs:element name="PhysicalValue" type="tns:SignalValueType"/>
            <xs:element name="LogicalValue" type="tns:SignalValueType"/>
        </xs:sequence>
    </xs:complexType>
    <!-- The IOSignal type -->
    <xs:complexType name="IOSignalType">
        <xs:sequence>
            <xs:element name="Name" type="xs:string"/>
            <xs:element name="Type" type="tns:SignalType"/>
            <xs:element name="Unit" type="tns:LinkType"/>
            <xs:element name="IOSignalCurrentValue" type="tns:IOSignalCurrentValueType"/>
            <xs:element name="AccessLevels" type="tns:AccessLevelType"/>
            <xs:element name="GeneralConfig" type="tns:GeneralConfigurationType"/>
            <xs:element name="RunTimeConfig" type="tns:RunTimeConfigurationType"/>
        </xs:sequence>
    </xs:complexType>
    <!-- The response -->
    <xs:element name="IOSignal">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Status" type="tns:StatusType"/>
                <xs:element name="IOSignalItem" type="tns:IOSignalType"/>
            </xs:sequence>
            <xs:attribute name="UserDef" type="tns:UserdefType"/>
        </xs:complexType>
    </xs:element>
</xs:schema>



This is my xml: 
<?xml version="1.0" encoding="UTF-8"?>
<tns:IOSignal xmlns:tns="http://www.example.org/iosystem" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.example.org/iosystem
file:///C:/util/xsde-3.1.0-i686-windows/examples/cxx/hybrid/hello/hello.xsd">
    <tns:Status>
        <tns:RetCode>10</tns:RetCode>
        <tns:ErrStr>ErrStr1</tns:ErrStr>
    </tns:Status>
    <tns:IOSignalItem>
        <tns:Name>DO1</tns:Name>
        <tns:Type>DO</tns:Type>
        <tns:Unit href="mlink"></tns:Unit>
        <tns:IOSignalCurrentValue>
            <tns:State>Unblocked</tns:State>
            <tns:PhysicalValue>
                <tns:Time>100</tns:Time>
                <tns:Analog>
                    <tns:Value>19.1</tns:Value>
                </tns:Analog>
                <tns:Quality>Good</tns:Quality>
            </tns:PhysicalValue>
            <tns:LogicalValue>
                <tns:Time>100</tns:Time>
                <tns:Analog>
                    <tns:Value>17.1</tns:Value>
                </tns:Analog>
                <tns:Quality>Good</tns:Quality>
            </tns:LogicalValue>
        </tns:IOSignalCurrentValue>
        <tns:AccessLevels>
            <tns:AccessLevel>LocalAuto</tns:AccessLevel>
        </tns:AccessLevels>
        <tns:GeneralConfig>
            <tns:SignalLabel>Lable</tns:SignalLabel>
            <tns:UnitMap>10</tns:UnitMap>
            <tns:Category>safety</tns:Category>
            <tns:Access>Access</tns:Access>
            <tns:Default>10</tns:Default>
            <tns:FiltPas>11</tns:FiltPas>
            <tns:FiltAct>12</tns:FiltAct>
            <tns:Invert>true</tns:Invert>
            <tns:EncType>enc</tns:EncType>
            <tns:MaxLog>1001.1</tns:MaxLog>
            <tns:MaxPhys>100.1</tns:MaxPhys>
            <tns:MaxPhysLimit>3003.2</tns:MaxPhysLimit>
            <tns:MaxBitVal>100</tns:MaxBitVal>
            <tns:MinLog>1</tns:MinLog>
            <tns:MinPhys>18.1</tns:MinPhys>
            <tns:MinPhysLimit>19.1</tns:MinPhysLimit>
            <tns:MinBitVal>2</tns:MinBitVal>
            <tns:SysfailReset>true</tns:SysfailReset>
        </tns:GeneralConfig>
        <tns:RunTimeConfig>
            <tns:SignalBits>10</tns:SignalBits>
        </tns:RunTimeConfig>
    </tns:IOSignalItem>
</tns:IOSignal>


The code:
    IOSignal_paggr iosignalp;

    xml_schema::document_pimpl doc_p (iosignalp.root_parser (),
                                      iosignalp.root_name ());
    iosignalp.pre ();

    doc_p.parse (argv[1]); // Throw exception


/Kjell
 
 		 	   		  
_________________________________________________________________
Hotmail: Free, trusted and rich email service.
https://signup.live.com/signup.aspx?id=60969


More information about the xsde-users mailing list