没有为文档检测到语法约束(DTD或XML模式)


202

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

元素类型“模板”的内容必须匹配“(描述,变量?,变量字段?,允许多变量?,类模式?,getter-setter ?、允许文件扩展名?,需要数字?类?,模板主体)”。


@John-是的,这是蚀。
fastcodejava 2010年


8
我不会做这样的偏好| XML | XML文件| 在Eclipse中进行验证,因为这仅掩盖/隐藏错误,但不能解决错误。如果仅使用Eclipse构建Android应用程序,则此“解决方案”是可以接受的。但是,如果您使用Eclipse来构建其他Java项目(例如JSF等),并且在XML“验证”被“关闭”的情况下,它将破坏这些项目。所以要小心 真正的解决方案是让Oracle,Google和IBM使用更新的DTD和模式来更新其软件。
ChuongPham 2014年

如果我将一个安装用于Android应用程序,而另一个安装用于执行Java Web开发工作,则发现Eclipse的运行速度更快且崩溃更少。因此,我很乐意仅将上述解决方案用于Eclipse的android ADT安装。
戴蒙·史密斯

Answers:


408

就我而言,我已经解决了这个烦人的警告,只需<!DOCTYPE xml><?xml ... >标记后添加。

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

10
同意。这应该是公认的答案。“隐藏”警告并不能完全“解决”警告。

31
在第二行“ <!DOCTYPE xml>”中,“ xml”应与文档根元素的名称匹配。
2015年

Downvote:问题是如何使食客对催款人拥有的dtd进行验证,而不是如何消除警告。
Periata Breatta

不起作用 Eclipse 4.10,日期2019-05-31。有时警告会消失-但是,当您重新启动Eclipse时,警告会再次出现。
麦克啮齿动物

两件事:1.您的doctype声明必须与xml文档的根节点名称匹配。2.该警告可能一直存在,直到您通过右键单击项目浏览器菜单中的/验证执行显式验证。
mvreijn

162

在Eclipse 3.7.1中,这对我有用:转到“首选项”窗口,然后进入XML-> XML文件->验证。然后,在右侧首选项面板的“验证文件”部分中,为“未指定语法”首选项在下拉框中选择“忽略”。您可能需要关闭文件,然后重新打开它以消除警告。

(我知道这个问题很旧,但这是我在搜索警告时发现的第一个问题,因此我在这里为其他搜索者发布了答案。)


1
我必须确保选中“手动”框和“构建”框,然后通过右键单击项目并选择“验证”来消除警告,从而进行手动验证。似乎在Eclipse中存在一个错误,验证程序陷入混乱。你应该能够至少有手工验证工作,即使你不希望它在构建时发生。然后,您应该能够在手动验证后轻松清除警告。在此之前,这是解决方案。
crowmagnumb 2012年

1
警告打破了智能感知,我花了很多时间弄清楚是什么原因。解决了它:)
Shekhar

您也可以在逐个项目的基础上执行此操作,从而在.project文件中进行更改,您可以检入源代码控制并帮助您的同事!右键单击项目,然后转到“属性”,然后从那里按照上面的说明进行操作,而不是转到“首选项”窗口。
Stuart Leyland-Cole 2013年

2
下注。这个问题问的不是如何隐藏警告,但如何解决它(即使Eclipse正确地验证文档)..
Periata Breatta

34

回答:

在下面对您的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.
  >

简单说明:

一个非常基本的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行)扩大的情况下&author;,以Your Author Name当文件由XML解析器解析
的定义第8行)结束


21

真正的解决方案:

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

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

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


不起作用 Eclipse 4.10,日期2019-05-31。有时警告会消失-但是,当您重新启动Eclipse时,警告会再次出现。
麦克·啮齿动物

@mikerodent警告可能会一直存在,直到您通过右键单击/在项目浏览器菜单中的Validate执行显式验证
mvreijn

11

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

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

“窗口\首选项\ 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
DJB

10

添加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中添加这两行时,警告消失了
Eugene Gr。Philippov

7

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

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

<rootElement>
 ....
</rootElement>

以上适用于Eclipse Juno +


该警告可能一直存在,直到您通过右键单击项目浏览器菜单中的“验证”或执行“验证”为止。
mvreijn

6

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

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


6

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

经过研究后,我也遇到了同样的问题,找到了解决方案,并在开头添加了以下内容进行修复

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

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

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明


3

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

元素类型“模板”的内容必须匹配“(描述+,变体?,变体字段?,允许多个变体?”,类模式?,“ getter-setter”,允许文件扩展名?,“模板主体”) 。

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


括号表示顺序很重要。您的文档在class-pattern元素之后有一个allow-multiple-variation元素,这是无效的。您真的应该在询问其他问题之前更改问题或接受现有的答案。
nitind 2011年

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配置的摘要行即可。



1

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


1
  1. 将整个代码复制到记事本中。
  2. 临时保存任何名称的文件[在保存文件时,使用“编码” = UTF-8(或更高,但UTF))。
  3. 关闭文件。
  4. 再次打开。
  5. 复制粘贴回您的代码。

错误必须消失。


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



0

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


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

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

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

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

步骤4:刷新并清理项目

尤里卡!它正在工作:)


我尝试使用您的解决方案。但是不幸的是,当我刷新和清理项目时,新添加的“ JRE系统库”从“库”部分以及“订单和导出”部分中消失了。请帮忙。
VikramV 2014年

除第4步“清理项目”可能会(或可能不会)帮助外,大多数答案与问题无关。
亚伦·迪古拉

0

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


-1

我在问题视图中删除了警告。直到现在才回来。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.