我有这个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 ?,允许文件扩展名?,数量 - 要求 - 班?,模板型)”。
在我的情况下,我通过在<!DOCTYPE xml>
标签后添加<?xml ... >
解决了这个烦人的警告。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
我知道这是旧的,但我正在通过相同的问题,并在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配置的建议行。
这可能是由于关闭了eclipse中的验证。
在Eclipse 3.5.2中解决了这个问题。两个完全相同的布局,其中一个有警告。关闭所有标签,重新打开警告时消失了。
错误必须消失。
我在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>
验证工作和警告是固定的(不被忽略)。
我在使用web.xml文件的eclipse中遇到了同样的问题 它向我展示了“文档中没有引用的语法约束”
但它可以通过添加标签来解决
在xml标签之后,即<?xml version = "1.0" encoding = "UTF-8"?>
以下是此问题的可行解决方案:
第1步:右键单击项目并转到属性
第2步:转到“库”并删除项目的“JRE系统库”
第3步:点击“添加库” - >“JRE系统库” - >选择“工作区默认JRE”
第3步:转到“订购和导出”并标记新添加的“JRE系统库”
第4步:刷新并清理项目
找到了!它的工作:)
我发现解决方案非常简单,我认为你应该在修改偏好之前尝试。在我的情况下,我在一个字符串文件中遇到了这个问题,该文件有一个基本标签“resources”...我所做的就是从顶部和底部删除标签,清理项目,保存文件并重新插入标签。这个问题已经消失,从未给我任何警告。听起来很简单,但是嘿,有时它是解决问题的最简单的事情。干杯
我在问题视图中删除了警告。直到现在它还没有回来。
这在Eclipse 3.7.1中对我有用:转到Preferences窗口,然后是XML - > XML Files - > Validation。然后在右侧首选项面板的“验证文件”部分中,在下拉框中选择“无语法指定”首选项。您可能需要关闭该文件,然后重新打开它以使警告消失。
(我知道这个问题已经过时了,但这是我在搜索警告时找到的第一个问题,所以我在这里为其他搜索者发布答案。)
回答:
以下是您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文档的结构,包括:
EG
<!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解析器解析文档时,将
的实例展开到 
第7行)当XML解析器解析文档时,将&author;
的实例展开到Your Author Name
第8行)定义结束
真正的解决方案:
将<!DOCTYPE something>
添加到每个有问题的XML的开头,
在xml标签<?xml version="1.0" encoding="utf-8"?>
之后
你可以为doctype写任何东西,但基本上它应该是我所理解的清单,活动等
您是否尝试将架构添加到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文件并进行一些更改以违反架构,应通知您
添加DOCTYPE标签......
在这种情况下:
<!DOCTYPE xml>
添加后:
<?xml version="1.0" encoding="UTF-8"?>
所以:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
对我来说,这是在Windows上运行eclipse的字符编码和unix文件模式的问题:
只需标记完整的代码,剪切并粘贴(简称:CtrlA-CtrlX-CtrlV),一切都很好 - 不再“没有语法限制......”警告
一种新的干净方式可能是像这样编写你的xml:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE rootElement>
<rootElement>
....
</rootElement>
以上工作在Eclipse Juno中
我不能说你为什么得到“无语法约束......”警告,但我可以通过完全删除DOCTYPE声明在Eclipse中激发它。当我将声明放回并再次验证时,我收到以下错误消息:
元素类型“模板”的内容必须匹配“(描述+,变体?,变异字段?,允许多变量?,类模式?,getter-setter ?,允许文件扩展名?,模板体+) 。
这是正确的,我相信(不允许使用“number-required-classes”元素)。