XML模式验证:多个错误,如cvc-complex-type.2.4.a& CVC-复杂type.2.3

时间:2012-12-28 14:21:34

标签: xml xsd schema

我正在尝试根据我的XML架构验证我的XML文档。

这是我的架构:

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML Studio 2012 Developer Edition (Trial) 10.1.8.4306 (http://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="MSG">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="EnTete" type="EnTeteType" />
                <xs:element name="OME" type="OMEType" maxOccurs="unbounded" />
            </xs:sequence>
            <xs:attribute name="Type" type="xs:string" use="required" />
            <xs:attribute name="Version" type="xs:decimal" use="required" />
        </xs:complexType>
    </xs:element>
    <xs:complexType name="EnTeteType">
        <xs:sequence>
            <xs:element ref="Source" />
            <xs:element ref="Creation" />
        </xs:sequence>
    </xs:complexType>
    <xs:element name="Source">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:enumeration value="NEBEFI" />
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="Creation">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="12" />
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:complexType name="OMEType">
        <xs:sequence>
            <xs:element ref="Derniere-Modif" />
            <xs:element ref="Date-Mesure" />
            <xs:element name="Reference" type="ReferenceType" />
            <xs:element name="Puissance" type="PuissType" />
            <xs:element ref="Total" />
        </xs:sequence>
        <xs:attribute name="Nom" type="xs:string" use="required" />
    </xs:complexType>
    <xs:element name="Derniere-Modif" type="xs:string" />
    <xs:element name="Date-Mesure">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="14" />
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:complexType name="ReferenceType">
        <xs:sequence>
            <xs:element ref="Nature" />
            <xs:element ref="Statut" />
            <xs:element ref="Type-Gest" />
            <xs:element ref="Gest" />
            <xs:element ref="Type-Res" />
            <xs:element ref="Nb-h" />
        </xs:sequence>
    </xs:complexType>
    <xs:element name="Nature" type="xs:string" />
    <xs:element name="Statut">
        <xs:simpleType>
            <xs:restriction base="xs:int">
                <xs:enumeration value="0" />
                <xs:enumeration value="1" />
                <xs:enumeration value="2" />
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="Type-Gest" type="xs:string" />
    <xs:element name="Type-Res" type="xs:string" />
    <xs:element name="Gest">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:length value="10" />
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="Nb-h">
        <xs:simpleType>
            <xs:restriction base="xs:int">
                <xs:enumeration value="23" />
                <xs:enumeration value="24" />
                <xs:enumeration value="25" />
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="Puiss">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="Val" maxOccurs="unbounded" />
            </xs:sequence>
            <xs:attribute name="Unite" type="xs:string" use="required" />
        </xs:complexType>
    </xs:element>
    <xs:element name="Val" type="xs:string" />
    <xs:element name="Total">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="xs:string">
                    <xs:attribute name="Unite" type="xs:string" use="required" />
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
    <xs:complexType name="PuissType">
        <xs:all>
            <xs:element ref="Puiss" />
        </xs:all>
    </xs:complexType>
</xs:schema>

这是我的XML文档:

<?xml version="1.0" encoding="ISO-8859-1"?>
<MSG xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" Type="Publication" Version="1.0">
 <EnTete>
  <Source>NEBEFI</Source> 
  <Creation>201208092324</Creation> 
</EnTete>
 <OME Nom="Effacements RE">
  <Derniere-Modif>20120809232419</Derniere-Modif> 
  <Date-Mesure>20120809000000</Date-Mesure> 
 <Reference>
  <Nature>ACHAT</Nature> 
  <Statut>2</Statut> 
  <Type-Gest>RE</Type-Gest> 
  <Gest>RE_ENEL_RE</Gest> 
  <Type-Res>D</Type-Res> 
  <Nb-h>24</Nb-h> 
</Reference>
 <Puiss Unite="MW">
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val>
                <Val>1.500</Val> 
  </Puiss>
  <Total Unite="MWh">5961</Total> 
  </OME>
</MSG>

现在,当我验证文档时(通过Eclipse),我收到以下消息:

  

无效。错误 - 第18行,第21行:org.xml.sax.SAXParseException;   lineNumber:18; columnNumber:21; cvc-complex-type.2.4.a:无效   从元素'Puiss'开始发现内容。 '{Puissance}'之一   是预期的。

     

错误 - 第69,9行:org.xml.sax.SAXParseException; lineNumber:69;   columnNumber:9; cvc-complex-type.2.3:元素'OME'不能有   character [children],因为类型的内容类型是仅元素。

     

错误 - 第70,7行:org.xml.sax.SAXParseException; lineNumber:70;   columnNumber:7; cvc-complex-type.2.3:元素'MSG'不能有   character [children],因为类型的内容类型是仅元素。

这条消息没有任何意义,在网上寻找解决方案非常困难(不可能?)。

1 个答案:

答案 0 :(得分:1)

第一个错误至少非常明确 - 根据您的架构,OME的倒数第二个子元素应命名为Puissance,但解析器已找到Puiss。特别是,阅读其余的模式,它看起来像是期待

<Puissance>
  <Puiss Unite="MW">
    <!-- Val elements as before -->
  </Puiss>
</Puissance>

如果这是您自己的架构,您可能需要替换

<xs:element name="Puissance" type="PuissType" />
使用简单的

OMEType

<xs:element ref="Puiss" />

对于我同意的其他两个错误,除非在XML中有一些不可见的非打印字符,否则它们似乎没有多大意义,但我知道Eclipse在过去和某些类错误中相当混淆开始报告不存在的问题 - 一旦你修复了第一个错误,你可能会发现其他错误也消失了。