ChatGPT解决这个技术问题 Extra ChatGPT

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

我有这个 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,我现在收到此错误:

元素类型“模板”的内容必须匹配“(description,variation?,variation-field?,allow-multiple-variation?,class-pattern?,getter-setter?,allowed-file-extensions?,number-required-类?,模板主体)”。

我不会这样做XML | XML 文件 |在 Eclipse 中进行验证,因为这只会掩盖/隐藏错误,它不能解决错误。如果你只使用 Eclipse 来构建 Android 应用程序,那么这个“解决方案”是可以接受的。但是,如果您使用 Eclipse 构建其他 Java 项目 - JSF 等 - 如果 XML 验证被“关闭”,它将破坏这些项目。所以要小心。真正的解决方案是甲骨文、谷歌和 IBM 使用更新的 DTD 和模式来更新他们的软件。
如果我保留一个用于处理 android 应用程序的安装和另一个用于进行 Java Web 开发工作的安装,我会发现 Eclipse 更快且更不容易崩溃。所以我很乐意将上面的解决方案仅用于我的 Eclipse 的 android ADT 安装。

T
TylerH

我通过在 <?xml ... > 标记之后指定 <!DOCTYPE xml> 而不是指定其他内容(如您的情况中的 templates)来消除这个恼人的警告。

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

在第二行中,“”,“xml”应该与文档根元素的名称相匹配。
Downvote:问题是如何让 Eclipse 对提问者拥有的 dtd 执行验证,而不是如何消除警告。
不工作。 Eclipse 4.10,日期 2019-05-31。有时警告会消失 - 但当您重新启动 Eclipse 时它会再次出现。
两件事:1.您的 doctype 声明必须与 xml 文档的根节点名称匹配。 2. 警告可能会一直存在,直到您通过右键单击项目资源管理器菜单中的/验证来执行显式验证。
T
TylerH

这在 Eclipse 3.7.1 中对我有用:

转到 Preferences 窗口,然后 XML -> XML Files -> Validation。

然后在右侧首选项面板的验证文件部分中,在“未指定语法”首选项的下拉框中选择忽略。您可能需要关闭文件,然后重新打开它以使警告消失。


我必须确保选中“手动”框和“构建”框,然后通过右键单击项目并选择“验证”进行手动验证,以使警告消失。似乎 eclipse 中有一个错误,其中验证器被搞砸了。即使您不希望它在构建时发生,您至少应该能够进行手动验证工作。然后您应该能够在进行手动验证后轻松清除警告。在此之前,这是解决方案。
警告打破了智能感知,我花了很多时间弄清楚原因是什么。这解决了它:)
您也可以在逐个项目的基础上执行此操作,这会在您的 .project 文件中进行更改,您可以检查源代码控制并帮助您的同事!无需转到“首选项”窗口,而是右键单击您的项目并转到“属性”并从那里按照上面的说明进行操作。
否决票。问的问题不是如何隐藏警告,而是如何解决它(即让 eclipse 正确验证文档)..
P
Pup

回答:

在下面对您的每条 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 文档的结构,包括:

法律要素清单

特殊字符

字符串

还有更多

例如

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

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


A
Amir.F

真正的解决方案:

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

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

您可以为 doctype 编写任何内容,但据我了解,基本上它应该是清单、活动等


不工作。 Eclipse 4.10,日期 2019-05-31。有时警告会消失 - 但当您重新启动 Eclipse 时它会再次出现。
@mikerodent 警告可能会一直存在,直到您通过右键单击项目资源管理器菜单中的/验证来执行显式验证
u
user1374968

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

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

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

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

例子:

<?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 文件并进行一些更改以违反架构,您应该会收到通知


这对我有用,但是有了这个改变。我正在编辑一个 .wadl 文件(请参阅 w3.org/Submission/wadl)和其中使用的示例。我只能通过使用 xmlns:xsi="w3.org/2001/XMLSchema-instance" xmlns:xsd="w3.org/2001/XMLSchema" xmlns="wadl.dev.java.net/2009/02" 而不是 xsi:schemaLocation="wadl.dev.java.net/2009/02 wadl.xsd “作为该提交文件中的示例。我使用 wadl.dev.java.net/2009/02 为命名空间名称添加了一个目录条目
J
Jorge Bastida Cano

添加 DOCTYPE 标记...

在这种情况下:

<!DOCTYPE xml>

之后添加:

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

所以:

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

在 Eclipse JEE v. 2018-12 为我工作。当我将这两行添加到 ant 的 build.xml 时,警告消失了
B
Bhupendra Kumar

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

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

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

在我的情况下,这导致了其他一些问题。我通过阅读建议解决了这个问题,这又变成了另一个问题,已经解决了理解最初的原因,即第一个链接被破坏(未找到)。下面是一步一步的图像,它解释了为完全解决问题所做的工作。

https://i.stack.imgur.com/ka1dq.jpg

https://i.stack.imgur.com/J9Tak.jpg

https://i.stack.imgur.com/rl8Oq.jpg

https://i.stack.imgur.com/E9fiK.jpg

https://i.stack.imgur.com/c5QjS.jpg


D
Damilola

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

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

<rootElement>
 ....
</rootElement>

以上适用于 Eclipse Juno+


在您通过右键单击项目资源管理器菜单中的/验证执行显式验证之前,警告可能会一直存在。
u
user3022856

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

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


m
mzjn

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

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

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


括号表示顺序很重要。您的文档在 class-pattern 元素之后有一个 allow-multiple-variation 元素,这是无效的。您确实应该更改问题或接受现有答案,然后再询问其他答案。
J
José Oliveira

我知道这很旧,但我遇到了同样的问题,并在 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 行。


f
fastcodejava

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


d
delformo

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


s
sifr_dot_in

在记事本中复制整个代码。暂时用任何名称保存文件[保存文件时使用“编码”= UTF-8(或更高版本,但 UTF)]。关闭文件。再次打开它。将其复制粘贴回您的代码。

错误必须消失。


M
Max Hohenegger

我在 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


S
Stephan

我在使用 web.xml 文件的 Eclipse 中也遇到了同样的问题,它向我展示了“文档中没有引用语法约束”

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


对我来说工作得很好(Eclipse Luna)谢谢
u
user2372633

这是此问题的有效解决方案:

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

第 2 步:转到“库”并删除项目的“JRE 系统库”

第 3 步:单击“添加库”->“JRE 系统库”->选择“工作区默认 JRE”

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

第 4 步:刷新和清理项目

尤里卡!它正在工作:)


我尝试使用您的解决方案。但不幸的是,当我刷新和清理我的项目时,新添加的“JRE 系统库”从我的“库”部分以及“订单和导出”部分中消失了。请帮忙。
这个答案的大部分与问题无关,除了第 4 步“清理项目”可能(或可能没有)帮助。
F
Francesco D.M.

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