未检测到文档的语法约束(DTD 或 XML 模式)
Posted
技术标签:
【中文标题】未检测到文档的语法约束(DTD 或 XML 模式)【英文标题】:No grammar constraints (DTD or XML schema) detected for the document 【发布时间】:2011-05-31 21:48:21 【问题描述】:我有这个 dtd:http://fast-code.sourceforge.net/template.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,现在出现此错误:
元素类型“template”的内容必须匹配“(description,variation?,variation-field?,allow- 多变?,类模式?,getter-setter?,允许的文件扩展?,数字要求- 类?,模板主体)”。
【问题讨论】:
查看以下链接:No grammar constraints (DTD or XML schema) detected for the document 和 Bogus Eclipse warning for web.xml。 我不会这样做 首选项 | XML | XML 文件 | Eclipse 中的验证,因为这只掩盖/隐藏错误,它不会解决错误。如果你只使用 Eclipse 来构建 android 应用程序,那么这个“解决方案”是可以接受的。但是,如果您使用 Eclipse 构建其他 Java 项目 - JSF 等 - 如果 XML 验证被“关闭”,它将破坏这些项目。所以要小心。真正的解决方案是甲骨文、谷歌和 IBM 使用更新的 DTD 和模式来更新他们的软件。 如果我保留一个用于处理 android 应用程序的安装和另一个用于进行 Java Web 开发工作的安装,我发现 Eclipse 的速度要快得多,而且更不容易崩溃。所以我很乐意将上面的解决方案仅用于我的 Eclipse 的 android ADT 安装。 【参考方案1】:在我的例子中,我通过在<?xml ... >
标记后添加<!DOCTYPE xml>
解决了这个烦人的警告。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
【讨论】:
同意。这应该是公认的答案。 “隐藏”警告并不完全是“解决”它。 在第二行中,“”,“xml”应该与文档的根元素的名称匹配。 投反对票:问题是如何让 eclipse 对提问者拥有的 dtd 执行验证,而不是如何消除警告。 不起作用。 Eclipse 4.10,日期 2019-05-31。有时警告会消失 - 但当您重新启动 Eclipse 时它会再次出现。 两件事:1.你的doctype声明必须匹配xml文档的根节点名称。 2.警告可能会一直存在,直到您通过右键单击项目资源管理器菜单中的/验证来执行显式验证。【参考方案2】:这在 Eclipse 3.7.1 中对我有用:转到 Preferences 窗口,然后是 XML -> XML Files -> Validation。然后在右侧首选项面板的验证文件部分中,在“未指定语法”首选项的下拉框中选择忽略。您可能需要关闭文件然后重新打开它才能使警告消失。
(我知道这个问题很老,但它是我在搜索警告时发现的第一个问题,所以我在这里为其他搜索者发布答案。)
【讨论】:
我必须确保选中“手动”框和“构建”框,然后通过右键单击项目并为警告选择“验证”进行手动验证走开。似乎 eclipse 中有一个错误,其中验证器被搞砸了。您应该至少能够进行手动验证工作,即使您不希望它在构建时发生。然后您应该能够在进行手动验证后轻松清除警告。在此之前,这就是解决方案。 警告中断了智能感知,我花了很多时间弄清楚原因是什么。这解决了它:) 您也可以在逐个项目的基础上执行此操作,这会在您的 .project 文件中进行更改,您可以检查源代码控制并帮助您的同事!无需转到“首选项”窗口,而是右键单击您的项目并转到“属性”并从那里按照上面的说明进行操作。 投反对票。提出的问题不是如何隐藏警告,而是如何解决它(即让 eclipse 正确验证文档)..【参考方案3】:答案:
在下面对您的每条 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例如
<!DOCTYPE nameOfYourRootElement
[
<!ELEMENT nameOfYourRootElement (nameOfChildElement1,nameOfChildElement2)>
<!ELEMENT nameOfChildElement1 (#PCDATA)>
<!ELEMENT nameOfChildElement2 (#PCDATA)>
<!ENTITY nbsp " ">
<!ENTITY author "Your Author Name">
]>
以上行的含义...
第 1 行)定义为“nameOfYourRootElement”的根元素
第 2 行)元素定义的开始
第 3 行)定义为“nameOfYourRootElement1”和“nameOfYourRootElement2”的根元素子元素
第 4 行)子元素,定义为数据类型#PCDATA
第 5 行)子元素,定义为数据类型#PCDATA
第 6 行)当 XML 解析器解析文档时,将 &nbsp;
的实例扩展为 &#xA0;
第 7 行)当 XML 解析器解析文档时,将 &author;
的实例扩展为 Your Author Name
第 8 行)定义结束
【讨论】:
【参考方案4】:真正的解决方案:
在每个有问题的 XML 的开头添加<!DOCTYPE something>
,
在xml标签<?xml version="1.0" encoding="utf-8"?>
之后
你可以为doctype写任何东西,但据我所知,基本上它应该是manifest、activity等
【讨论】:
不起作用。 Eclipse 4.10,日期 2019-05-31。有时警告会消失 - 但当您重新启动 Eclipse 时它会再次出现。 @mikerodent 警告可能会持续存在,直到您通过右键单击/在项目浏览器菜单中进行验证来执行显式验证【参考方案5】:您是否尝试将架构添加到 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 为命名空间名称添加了一个目录条目【参考方案6】:添加 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 时,警告消失了【参考方案7】:尝试理解警告消息中给出的建议,这有时会有所帮助。
我也遇到了同样的问题,经过一番研究,我找到了解决方案,并通过在开头添加以下行来解决
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
在我的情况下会导致其他一些问题。 我通过阅读建议解决了这个问题,这又变成了另一个问题,已经解决了理解原始原因的问题,即第一个链接被破坏(未找到)。下面是一步一步的图像,它解释了为完全解决问题所做的工作。
【讨论】:
【参考方案8】:一种新的干净方式可能是像这样编写您的 xml:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE rootElement>
<rootElement>
....
</rootElement>
以上在 Eclipse Juno+ 中工作
【讨论】:
警告可能会一直存在,直到您在项目浏览器菜单中通过右键单击/验证执行显式验证。【参考方案9】:对我来说,字符编码和unix文件模式在Windows上运行eclipse是个问题:
只需标记完整的代码,剪切并粘贴回来(简而言之:CtrlA-CtrlX-CtrlV),一切都很好 - 不再出现“无语法限制...”警告
【讨论】:
【参考方案10】:我真的不能说为什么您会收到“无语法约束...”警告,但我可以通过完全删除 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 元素,这是无效的。您确实应该在询问其他问题之前更改问题或接受现有答案。【参考方案11】:我知道这是旧的,但我通过了同样的问题,并在 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 行。
【讨论】:
【参考方案12】:这可能是由于在 eclipse 中关闭了验证。
【讨论】:
【参考方案13】:在 Eclipse 3.5.2 中解决了这个问题。两个完全相同的布局,其中一个有警告。关闭所有选项卡,重新打开时警告消失了。
【讨论】:
【参考方案14】:-
将整个代码复制到记事本中。
使用任何名称临时保存文件[保存文件时使用“编码”= UTF-8(或更高版本,但 UTF)]。
关闭文件。
再次打开它。
复制粘贴回您的代码。
错误必须消失。
【讨论】:
【参考方案15】:我在 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
【讨论】:
【参考方案16】:我在使用 web.xml 文件的 Eclipse 中也遇到了同样的问题 它向我展示了“文档中没有引用语法约束”
但是可以通过添加标签来解决
在xml标签之后,即<?xml version = "1.0" encoding = "UTF-8"?>
【讨论】:
对我来说工作得很好(Eclipse Luna)谢谢【参考方案17】:这是解决此问题的有效解决方案:
第 1 步:右键单击项目并转到属性
第 2 步:转到“库”并删除项目的“JRE 系统库”
第 3 步:点击“添加库”-->“JRE 系统库”-->选择“工作区默认 JRE”
第 3 步:转到“订购和导出”并标记新添加的“JRE 系统库”
第 4 步:刷新和清理项目
尤里卡!它正在工作:)
【讨论】:
我尝试使用您的解决方案。但不幸的是,当我刷新和清理我的项目时,新添加的“JRE 系统库”从我的“库”部分以及“订单和导出”部分中消失了。请帮忙。 这个答案的大部分与问题无关,除了第 4 步“清理项目”可能(或可能没有)帮助。【参考方案18】:我发现解决方案非常简单,我认为您应该在修改偏好之前尝试一下。就我而言,我在一个以“资源”为基本标签的字符串文件中遇到了这个问题......我所做的只是从顶部和底部删除标签,清理项目,保存文件并重新插入标签。 这个问题已经消失了,从来没有给我任何警告。 这听起来很简单,但是嘿,有时它是解决问题的最简单的事情。干杯
【讨论】:
以上是关于未检测到文档的语法约束(DTD 或 XML 模式)的主要内容,如果未能解决你的问题,请参考以下文章