例外:cvc-complex-type.2.4.a:从eleme nt'employe'开始发现无效内容。其中一个“{} contractemployee”有望

时间:2017-06-03 13:54:23

标签: xml xsd

所以..我有这个ER图: ER diagram

因此我写了一个company.xml:

<?xml version="1.0" encoding="UTF-8"?>

<company xmlns="urn:company.Namespace" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:schemaLocation="urn:company.Namespace companyxsd.xsd">
    <companyname>ABC company</companyname>
    <address>xyz street, India.</address>

    <department>
        <dname>Marketing</dname>
        <deptphoneno>9876543210</deptphoneno>
        <deptfaxno>0442456879</deptfaxno>
        <deptemail>marketing@abc.com</deptemail>

        <employee>
            <empid>101</empid>
            <ename>Rishie</ename>
            <emailid>rishie@abc.com</emailid>
            <phoneno>9876543211</phoneno>
        </employee>

        <contractemployee>
            <name>Ravi</name>
            <phoneno>9874563214</phoneno>
        </contractemployee>
    </department>

</company>    

和我的公司xsd.xsd如下:

    <?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:company.Namespace" xmlns="urn:company.Namespace">

    <xs:element name="company">
     <xs:complexType>
      <xs:sequence>
       <xs:element name="companyname" type="xs:string"/>
       <xs:element name="address" type="xs:string"/>

       <xs:element name="department">
        <xs:complexType>
         <xs:sequence>
          <xs:element name="dname" type="xs:string"/>
          <xs:element name="deptphoneno" type="xs:integer"/>
          <xs:element name="deptfaxno" type="xs:integer"/>
          <xs:element name="deptemail" type="xs:string"/>

          <xs:element name="employee">      
           <xs:complexType>
            <xs:sequence>
             <xs:element name="empid" type="xs:integer"/>
             <xs:element name="ename" type="xs:string"/>
             <xs:element name="emailid" type="xs:string"/>
             <xs:element name="phoneno" type="xs:integer"/>
            </xs:sequence>
           </xs:complexType>
          </xs:element>


          <xs:element name="contractemployee">      
           <xs:complexType>
            <xs:sequence>
             <xs:element name="name" type="xs:string"/>
             <xs:element name="phoneno" type="xs:integer"/>
            </xs:sequence>
           </xs:complexType>
          </xs:element>

         </xs:sequence>
        </xs:complexType>
       </xs:element>
      </xs:sequence>
     </xs:complexType>
    </xs:element>

</xs:schema>

我不确定我的xml是否代表ER图。如果没有,请帮助我使用正确的xml模板。

因为我是初学者。我对我写过的XSd有疑问。 “:(

对于上述情况,我不断收到错误

Exception: cvc-complex-type.2.4.a: Invalid content was found starting with eleme
nt 'employee'. One of '{contractemployee}' is expected.

新错误:

Exception: cvc-elt.1.a: Cannot find the declaration of element 'company'. 

在这里帮助我好友!

2 个答案:

答案 0 :(得分:1)

我也有两个相同的错误。该错误不需要对xmlxsd文件的链接部分进行任何更改。实际上,scorm编辑器可能非常棘手。

预计{employee,contractemployee}之一

此错误要求元素合同employee和employee中具有某些属性,例如minOccurs和MaxOccurs属性。

我已经发布了xmlxsd的适当代码,这些代码已在scorm编辑器中成功运行。编码愉快!

XML:

<?xml version="1.0" encoding="UTF-8"?>
<company>
    <companyname>company name</companyname>
    <address>address</address>
    <department>
        <dname>dname</dname>
        <deptphoneno>22238500</deptphoneno>
        <deptfaxno>123456789</deptfaxno>
        <deptemail>email@email</deptemail>
        <employee>
            <empid>123</empid>
            <ename>ename</ename>
            <emailid>email@email</emailid>
            <phoneno>9444872829</phoneno>
        </employee>
        <contractemployee>
            <name>name</name>
            <phoneno>9445815259</phoneno>
        </contractemployee>
    </department>
</company>

XSD:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="company">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="companyname" type="xs:string"/>
                <xs:element name="address" type="xs:string"/>
                <xs:element maxOccurs="unbounded" name="department">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="dname" type="xs:string"/>
                            <xs:element name="deptphoneno" type="xs:string"/>
                            <xs:element name="deptfaxno" type="xs:integer"/>
                            <xs:element name="deptemail" type="xs:string"/>
                            <xs:element maxOccurs="unbounded" minOccurs="1" name="employee">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="empid" type="xs:integer"/>
                                        <xs:element name="ename" type="xs:string"/>
                                        <xs:element name="emailid" type="xs:string"/>
                                        <xs:element name="phoneno" type="xs:integer"/>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element maxOccurs="unbounded" minOccurs="0" name="contractemployee">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="name" type="xs:string"/>
                                        <xs:element name="phoneno" type="xs:integer"/>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

答案 1 :(得分:0)

您发布的XML + XSD不会创建您提到的错误,XML实际上并不是有效的xml。但是,您非常接近,XML和XSD中的命名空间声明存在问题。

在XSD中,您需要设置目标命名空间,如下所示:

?- check_prereq([course('ITCE418'), course('ACC112')],20135639).
true ;
false.

现在要确保文档验证,xml中的命名空间必须与放在XSD中的命名空间相同。在XML中,名称空间声明的格式也是无效的。如下:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="company.namespace">

请记住,这只是一个名称空间,它不是对xsd文件的实际引用,很多名称空间看起来像URI,但大多数都不是实际的功能URI。

我用一个例子“company.namespace”替换名称空间只是为了让它更清晰。使用文件名可能会创建他们实际指向文件的建议。

在XML中使用schemaLocation来标识相应的XSD文件时,需要添加名称空间/前缀声明。目前,xml解析器无法识别xs前缀,因为它在XML文件中是未知的。您可以按如下方式解决此问题:

<company xmlns="company.namespace">

以下是生成的文件: XML

<company xmlns="urn:company.Namespace"
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
 xs:schemaLocation="urn:company.Namespace companyxsd.xsd"> 

XSD

<?xml version="1.0" encoding="UTF-8"?>

<company xmlns="urn:company.Namespace"
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
 xs:schemaLocation="urn:company.Namespace companyxsd.xsd">    <companyname>ABC company</companyname>
    <address>xyz street, India.</address>

    <department>
        <dname>Marketing</dname>
        <deptphoneno>9876543210</deptphoneno>
        <deptfaxno>0442456879</deptfaxno>
        <deptemail>marketing@abc.com</deptemail>

        <employee>
            <empid>101</empid>
            <ename>Rishie</ename>
            <emailid>rishie@abc.com</emailid>
            <phoneno>9876543211</phoneno>
        </employee>

        <contractemployee>
            <name>Ravi</name>
            <phoneno>9874563214</phoneno>
        </contractemployee>
    </department>

</company>