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

fas*_*ava 191 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>
Run Code Online (Sandbox Code Playgroud)

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

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

Sab*_*san 383

在我的情况下,我通过简单地添加标签<!DOCTYPE xml>后解决了这个恼人的警告<?xml ... >.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
Run Code Online (Sandbox Code Playgroud)

  • 在第二行中,"<!DOCTYPE xml>","xml"应与文档的*根元素*的名称匹配. (27认同)
  • 同意.这应该是公认的答案."隐藏"警告并不是完全"解决"它. (10认同)
  • 否决:问题是如何让 Eclipse 对提问者拥有的 dtd 执行验证,而不是如何消除警告。 (2认同)

Mar*_*ein 162

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

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

  • 投反对票。所问的问题不是如何隐藏警告,而是如何解决它(即使 eclipse 正确验证文档)。 (3认同)

Pup*_*Pup 31

回答:

以下是您DTD的每一条评论.有关详细信息,请参阅官方规范.

  <!
  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.
  >
Run Code Online (Sandbox Code Playgroud)

简单说明:

一个非常基本的DTD看起来像这里的第二行:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE nameOfYourRootElement>
<nameOfYourRootElement>
</nameOfYourRootElement>
Run Code Online (Sandbox Code Playgroud)

详细说明:

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

  • 法律要素清单
  • 特殊字符
  • 字符串
  • 还有更多

例如

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

上述行的含义...
第1行)根元素定义为"nameOfYourRootElement"
第2行)元素定义的开始
第3行)根元素子节点定义为"nameOfYourRootElement1"和"nameOfYourRootElement2"
第4行子元素,定义为数据型#PCDATA
线5)子元素,其被定义为数据类型#PCDATA
6行)扩大的情况下&nbsp;,以&#xA0;当文件由XML解析器解析
第7行)扩大的情况下&author;,以Your Author Name当文件由XML解析器解析
的定义第8行)结束


Ami*_*r.F 20

真正的解决方案:

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

在xml标签之后 <?xml version="1.0" encoding="utf-8"?>

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


小智 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>
Run Code Online (Sandbox Code Playgroud)

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

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

作为键类型:命名空间名称

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


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


小智 9

添加DOCTYPE标签......

在这种情况下:

<!DOCTYPE xml>
Run Code Online (Sandbox Code Playgroud)

添加后:

<?xml version="1.0" encoding="UTF-8"?>
Run Code Online (Sandbox Code Playgroud)

所以:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
Run Code Online (Sandbox Code Playgroud)


Bhu*_*mar 8

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

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

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
Run Code Online (Sandbox Code Playgroud)

在我的情况下,这导致了其他一些问题。我通过阅读建议解决了这个问题,这又变成了另一个问题,这个问题已经解决了,理解了最初的原因,第一个链接被破坏了(没有找到)。以下是分步图像,解释了为完全解决问题已采取的措施。

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明


小智 6

对我来说,这是在Windows上运行eclipse的字符编码unix文件模式的问题:

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


Dam*_*ola 6

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

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

<rootElement>
 ....
</rootElement>
Run Code Online (Sandbox Code Playgroud)

以上工作在Eclipse Juno +中


mzj*_*zjn 4

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

元素类型“template”的内容必须匹配“(description+,variation?,variation-field?,allow-multiple-variation?,class-pattern?,getter-setter?,allowed-file-extensions?,template-body+) 。

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