【问题标题】:Eclipse Kepler XML validationEclipse Kepler XML 验证
【发布时间】:2014-06-29 13:47:23
【问题描述】:

我正在使用:

  • Windows 7 上的 Eclispe Kepler 服务版本 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 和完成 xml 时,我都无法验证 xsd 的 xml istance(没有 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"(“cd.xsd”)并添加targetNameSpace="www.mynamespace.com"(这是一个假地址)

提前谢谢你。

【问题讨论】:

    标签: xml eclipse validation xsd


    【解决方案1】:

    您拼错了将架构绑定到文件的xsi:noNameSpaceSchemaLocation 属性。你的文件头应该是:

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

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

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

    XSD 中的问题是:

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

    一旦这些问题得到解决,您将遇到验证错误:

    1. &lt;artist&gt; 元素中的字符不完全是 5 个
    2. &lt;title&gt; 元素不止一个(架构最多允许一个)
    3. &lt;title&gt; 之后没有包含有效xs:gYear 类型的必需&lt;year&gt; 元素

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

    【讨论】:

    • 随机投反对票?很高兴知道原因。有死链接吗?
    猜你喜欢
    • 2012-10-23
    • 1970-01-01
    • 2014-04-01
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 2014-01-06
    • 1970-01-01
    相关资源
    最近更新 更多