Eclipse Kepler XML验证

时间:2014-05-12 09:03:55

标签: xml eclipse validation xsd

我正在使用:

  • Windows 7上的Eclispe Kepler Service Release 2
  • Rinzo Xml Editor Core 1.4
  • Rinzo Xml Java集成1.4

我创建了一个新项目(File-> New Project ...)并添加了两个文件(New-> File):

cd.xsd和cd-istance.xml。这些文件位于同一个项目(文件夹)中。

我没有像New-> XML这样的菜单...... 我在编写xml时也没有能够验证xsd的xml istance,也没有在xml完成​​时验证(没有Preference-> Validate选项或类似的东西)。

实际上,我不知道对我的xsd的引用是否正确或Eclipse是否无法正常工作。

此后为cd.xsd。

<?xml version="1.0" encoding ="UTF-8"?>
<xs:schema 
xmlns:xs = "http://www.w3.org/2001/XMLSchema"
elementFormDefault = "qualified"
>

<xs:simpleType name = "artist" >
    <xs:restriction base="xs:string">
        <xs:length value= "5">
        </xs:length>
    </xs:restriction>
</xs:simpleType>    
<xs:element name = "title" type = "xs:string"></xs:element>
<xs:element name = "year" type = "xs:gYear"></xs:element>

<xs:element name = "song" >
    <xs:complexType name = "songType">
        <xs:sequence>
            <xs:element ref="artist" minOccur="0"></xs:element>
            <xs:element ref="title" minOccur="0" maxOccur="1"></xs:element>
            <xs:element ref="year" maxOccur="1"></xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

此后cd-istance.xml:

<?xml version="1.0" encoding ="UTF-8"?>
<CD
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamSpaceSchemaLocation="cd.xsd" 
>
   <artist>  </artist>
   <title> la  prova</title>
   <title> la prova2 </title>
</CD>

我期待至少两个错误,一个是艺术家(一个是空的),另一个是标题(违反了发生的约束)。

我做过一些尝试,只是提到一些:

  • 已添加xsi:noNamSpaceSchemaLocation="./cd.xsd"
  • 添加了xsi:targetLocation="./cd.xsd"(&#34; cd.xsd&#34;)并添加了targetNameSpace="www.mynamespace.com"(这是假地址)

提前谢谢你。

1 个答案:

答案 0 :(得分:0)

您拼错了将架构绑定到文件的xsi:noNameSpaceSchemaLocation属性。您的文件标题应为:

<CD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNameSpaceSchemaLocation="cd.xsd"> ...

如果您仍然无法在您的环境中进行验证,则可以使用this one等在线服务。

我粘贴了您的实例和XSD并对其进行了一些更改以进行验证。我将链接保存在fiddle中。

XSD中的问题是:

  1. 您的XML架构格式不正确。最后添加</xs:schema>标记。
  2. 未声明CD个元素。将<xs:element name="song">替换为<xs:element name="CD">
  3. maxOccursminOccurs属性在多个地方拼写错误。
  4. complexType元素定义中有一个名为song的嵌套。如果您有嵌套complexType,则不应该有name。将其设为顶级或删除name属性。
  5. 没有名为artist元素。但是,有一个带有该名称的类型。您可以将simpleType嵌套在<xs:element name="artist">声明中(并从类型中删除name属性),或将类型保留为顶级并声明<xs:element name="artist" type="artist">引用它(您可能希望为类型和元素使用不同的名称以避免混淆):
  6. <xs:element name="artist" type="ArtistType" />
        <xs:simpleType name="ArtistType" >
        <xs:restriction base="xs:string">
            <xs:length value="5"/>
        </xs:restriction>
    </xs:simpleType> 
    

    修复这些问题后,您将遇到验证错误:

    1. <artist>元素
    2. 中不正好有5个字符
    3. 有多个<title>元素(架构允许最多一个)
    4. <year>
    5. 后面没有包含有效xs:gYear类型的必需<title>元素

      您的代码经过验证here。您可以进行更改并查看验证结果。