我有这个 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 ... >
标记之后指定 <!DOCTYPE xml>
而不是指定其他内容(如您的情况中的 templates
)来消除这个恼人的警告。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
这在 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 文档的结构,包括:
法律要素清单
特殊字符
字符串
还有更多
例如
<!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 行)定义结束
真正的解决方案:
在每个有问题的 XML 的开头添加 <!DOCTYPE something>
,
在 xml 标记 <?xml version="1.0" encoding="utf-8"?>
之后
您可以为 doctype 编写任何内容,但据我了解,基本上它应该是清单、活动等
您是否尝试将架构添加到 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 文件并进行一些更改以违反架构,您应该会收到通知
添加 DOCTYPE 标记...
在这种情况下:
<!DOCTYPE xml>
之后添加:
<?xml version="1.0" encoding="UTF-8"?>
所以:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
尝试理解警告消息中给出的建议,它有时会有所帮助。
我也有同样的问题,在做了一些研究后,我找到了解决方案并通过在开头添加以下行来修复
<?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
一种新的干净方式可能是像这样编写您的 xml:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE rootElement>
<rootElement>
....
</rootElement>
以上适用于 Eclipse Juno+
对我来说,这是在 Windows 上运行 eclipse 的字符编码和 unix 文件模式的问题:
只需标记完整的代码,剪切并粘贴回来(简而言之:CtrlA-CtrlX-CtrlV),一切都很好 - 不再有“没有语法限制......”警告
我真的不能说为什么你会得到“没有语法约束......”警告,但我可以通过完全删除 DOCTYPE 声明在 Eclipse 中引发它。当我放回声明并再次验证时,我收到以下错误消息:
元素类型“模板”的内容必须匹配“(description+,variation?,variation-field?,allow-multiple-variation?,class-pattern?,getter-setter?,allowed-file-extensions?,template-body+) .
我相信这是正确的(不允许使用“number-required-classes”元素)。
我知道这很旧,但我遇到了同样的问题,并在 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 行。
这可能是由于在 eclipse 中关闭了验证。
在 Eclipse 3.5.2 中解决了这个问题。两个完全相同的布局,其中一个有警告。关闭所有选项卡,重新打开时警告消失了。
在记事本中复制整个代码。暂时用任何名称保存文件[保存文件时使用“编码”= UTF-8(或更高版本,但 UTF)]。关闭文件。再次打开它。将其复制粘贴回您的代码。
错误必须消失。
我在 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
我在使用 web.xml 文件的 Eclipse 中也遇到了同样的问题,它向我展示了“文档中没有引用语法约束”
但可以通过在xml标签后添加标签
来解决,即<?xml version = "1.0" encoding = "UTF-8"?>
这是此问题的有效解决方案:
步骤1:右键单击项目并转到属性
第 2 步:转到“库”并删除项目的“JRE 系统库”
第 3 步:单击“添加库”->“JRE 系统库”->选择“工作区默认 JRE”
第 3 步:转到“订购和导出”并标记新添加的“JRE 系统库”
第 4 步:刷新和清理项目
尤里卡!它正在工作:)
我发现解决方案非常简单,我认为您应该在修改偏好之前尝试一下。就我而言,我在一个以“资源”为基本标签的字符串文件中遇到了这个问题......我所做的只是从顶部和底部删除标签,清理项目,保存文件并重新插入标签。这个问题已经消失了,从来没有给我任何警告。听起来可能很简单,但是嘿,有时它是解决问题的最简单的事情。干杯