未检测到文档的语法约束(DTD或XML架构)

时间:2010-12-29 05:47:47

标签: xml eclipse validation dtd

我有这个dtd:http://fast-code.sourceforge.net/template.dtd 但是当我在xml中包含时,我会收到警告: 未检测到文档的语法约束(DTD或XML架构)。 xml是:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE templates PUBLIC "//UNKNOWN/" "http://fast-code.sourceforge.net/template.dtd">

<templates>
<template type="INSTANCE_OF_CLASS">
    <description>Used to Create instance of class</description>
    <variation>asasa</variation>
    <variation-field>asasa</variation-field>
    <class-pattern>asasa</class-pattern>
    <getter-setter>setter</getter-setter>
    <allowed-file-extensions>java</allowed-file-extensions>
    <number-required-classes>1</number-required-classes>
    <allow-multiple-variation>false</allow-multiple-variation>
    <template-body>
        <![CDATA[
            // Creating new instance of ${class_name}
            final ${class_name} ${instance} = new ${class_name}();
            #foreach ($field in ${fields})
                ${instance}.${field.setter}(${field.value});
            #end
        ]]>
    </template-body>
</template>
</templates>

编辑:我更改了xml,现在收到此错误:

  

元素类型“模板”的内容必须匹配“(描述,变化?,变异字段?,允许 -    多变化?,类图案?,消气部件设置器?,允许文件的扩展?,数须─    类?,模板体)”。

19 个答案:

答案 0 :(得分:357)

在我的情况下,我只需在<!DOCTYPE xml>标记后添加<?xml ... >就解决了这个恼人的警告。

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

答案 1 :(得分:161)

这在Eclipse 3.7.1中对我有用:转到Preferences窗口,然后是XML - &gt; XML文件 - &gt;验证。然后在右侧首选项面板的“验证文件”部分中,在下拉框中选择“无语法指定”首选项。您可能需要关闭该文件,然后重新打开它以使警告消失。

(我知道这个问题已经过时了,但这是我在搜索警告时找到的第一个问题,所以我在这里为其他搜索者发布答案。)

答案 2 :(得分:31)

答案:

对以下每条DTD的评论。有关详细信息,请参阅official spec

  <!
  DOCTYPE ----------------------------------------- correct
  templates --------------------------------------- correct  Name matches root element.
  PUBLIC ------------------------------------------ correct  Accessing external subset via URL.
  "//UNKNOWN/" ------------------------------------ invalid? Seems useless, wrong, out-of-place.
                                                             Safely replaceable by DTD URL in next line.
  "http://fast-code.sourceforge.net/template.dtd" - invalid  URL is currently broken.
  >

简单说明:

非常基本的DTD在这里看起来像第二行

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE nameOfYourRootElement>
<nameOfYourRootElement>
</nameOfYourRootElement>

详细说明:

DTD用于建立商定的数据格式并验证此类数据的接收。它们定义XML文档的结构,包括:

  • 法律要素清单
  • 特殊字符
  • 字符串
  • a lot more

E.g。

<!DOCTYPE nameOfYourRootElement
[
<!ELEMENT nameOfYourRootElement (nameOfChildElement1,nameOfChildElement2)>
<!ELEMENT nameOfChildElement1 (#PCDATA)>
<!ELEMENT nameOfChildElement2 (#PCDATA)>
<!ENTITY nbsp "&#xA0;"> 
<!ENTITY author "Your Author Name">
]>

以上行的含义......
第1行)根元素定义为&#34; nameOfYourRootElement&#34;
第2行)元素定义的开始
第3行)根元素子元素定义为&#34; nameOfYourRootElement1&#34;和&#34; nameOfYourRootElement2&#34;
第4行)子元素,定义为数据类型#PCDATA
第5行)子元素,定义为数据类型#PCDATA
第6行)当XML解析器解析文档时,将&nbsp;的实例扩展为&#xA0; 第7行)当XML解析器解析文档时,将&author;的实例扩展为Your Author Name 第8行)定义结束

答案 3 :(得分:20)

真正的解决方案:

<!DOCTYPE something>添加到每个有问题的XML的开头,

在xml标记<?xml version="1.0" encoding="utf-8"?>

之后

你可以为doctype写任何东西,但基本上它应该是我理解的表现,活动等

答案 4 :(得分:11)

您是否尝试将架构添加到xml目录?

在eclipse中

避免“为文档检测到没有语法约束(dtd或xml架构)。”我用来将xsd模式文件添加到

下的xml目录中

“Window \ preferences \ xml \ xml catalog \用户指定的条目”。

点击右侧的“添加”按钮。


示例:

<?xml version="1.0" encoding="UTF-8"?>
<HolidayRequest xmlns="http://mycompany.com/hr/schemas">
    <Holiday>
        <StartDate>2006-07-03</StartDate>
        <EndDate>2006-07-07</EndDate>
    </Holiday>
    <Employee>
        <Number>42</Number>
        <FirstName>Arjen</FirstName>
        <LastName>Poutsma</LastName>
    </Employee>
</HolidayRequest>

从这个xml我生成并保存了一个xsd:/home/my_user/xsd/my_xsd.xsd

位置:/home/my_user/xsd/my_xsd.xsd

作为密钥类型:命名空间名称

关键:http://mycompany.com/hr/schemas


关闭并重新打开xml文件并进行一些更改以违反架构,应该会通知您

答案 5 :(得分:6)

一种新的干净方式可能是像这样编写你的xml:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE rootElement>

<rootElement>
 ....
</rootElement>

上面的工作在Eclipse Juno +

答案 6 :(得分:6)

尝试理解警告消息中的建议,这有时会有所帮助。

我也遇到了同样的问题,在进行了一些研究之后,我找到了解决方案,并通过在开头添加以下行来解决

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

这会导致我遇到其他问题。 我通过阅读建议解决了问题,这又变成了另一个问题,已经理解了最初的原因,即第一个链接断开了(未找到)。下面是逐步的图像,这些图像说明了为完全解决问题而采取的措施。

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

答案 7 :(得分:6)

添加DOCTYPE代码...

在这种情况下:

<!DOCTYPE xml>

之后添加:

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

所以:

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

答案 8 :(得分:6)

对我而言,Windows上运行eclipse的字符编码 unix filemode 存在问题:

只需标记完整代码,剪切并粘贴(简称: CtrlA-CtrlX-CtrlV ),一切都很好 - 不再“没有语法限制......”警告

答案 9 :(得分:3)

我不能说你为什么得到“没有语法约束......”警告,但我可以通过完全删除DOCTYPE声明在Eclipse中激发它。当我把声明放回去并再次验证时,我收到此错误消息:

  

元素类型“模板”的内容   必须匹配   “(介绍+,变异?,变异场?,允许-多变化?,类图案?,消气部件设置器?,允许文件的扩展?,模板体+)。

这是正确的,我相信(不允许使用“number-required-classes”元素。)

答案 10 :(得分:3)

我知道这已经过时了,但是我传递了同样的问题并在spring文档中找到了解决方案,下面的xml配置已经解决了我的问题。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/tx 

<!-- THIS IS THE LINE THAT SOLVE MY PROBLEM -->
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 

http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

在我将这一行放在这个论坛主题中之前,我有相同的警告信息,并放置此...

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

它给了我以下警告信息......

The content of element type "template" must match "
(description,variation?,variation-field?,allow- multiple-variation?,class-
pattern?,getter-setter?,allowed-file-extensions?,number-required- 
classes?,template-body)".

所以只是尝试使用我的xml配置的sugested行。

答案 11 :(得分:2)

这可能是由于在日食中关闭了验证。

答案 12 :(得分:1)

  1. 将整个代码复制到记事本中。
  2. 使用任何名称暂时保存文件[保存文件时使用&#34;编码&#34; = UTF-8(或更高但是UTF)]。
  3. 关闭文件。
  4. 再次打开它。
  5. 将其粘贴回您的代码。
  6. 错误必须消失。

答案 13 :(得分:1)

在Eclipse 3.5.2中解决了这个问题。两个完全相同的布局,其中一个有警告。关闭所有标签,重新打开警告时消失了。

答案 14 :(得分:1)

我在 xsi:noNamespaceSchemaLocation 中使用了一个相对路径来提供本地xsd文件(因为我无法在实例xml中使用命名空间)。

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="../project/schema.xsd">
</root>

验证有效并且警告已修复(不会被忽略)。

https://www.w3schools.com/xml/schema_example.asp

答案 15 :(得分:1)

使用web.xml文件在Eclipse中我也遇到了相同的问题
它向我显示了此“文档中未引用语法约束”

,但可以通过添加标签来解决
xml标记之后,即<?xml version = "1.0" encoding = "UTF-8"?>

答案 16 :(得分:0)

我发现解决方案是非常简单的,我认为你应该在修改偏好之前尝试。在我的情况下,我在一个字符串文件中遇到了这个问题,该文件有一个基本标签“resources”...我所做的就是从顶部和底部删除标签,清理项目,保存文件并重新插入标签。 这个问题已经消失,从未给我任何警告。 听起来很简单,但是嘿,有时它是解决问题的最简单的事情。干杯

答案 17 :(得分:0)

以下是此问题的可行解决方案:


步骤1:右键单击项目并转到属性

步骤2:转到“图书馆”并删除项目的“JRE系统库”

第3步:点击“添加图书馆” - &gt;“JRE系统资源库” - >选择“工作区默认JRE”

步骤3:转到“订购和导出”并标记新添加的“JRE系统库”

第4步:刷新并清理项目

尤里卡!它的工作原理:))

答案 18 :(得分:0)

我在问题视图中删除了警告。它到现在为止还没有回来。