DTD代表W3C的XML 1.x建议书中规定的“文档类型定义”。 DTD为XML文档定义了正式语法:您可以使用哪些标签以及可以使用它们的位置。验证XML处理器将此语法应用于XML文档以确定它们是否符合这些语法,在这种情况下文档是“有效的”。
我没有获得外部 DTD(同一文件夹中的本地文件)来使用相对或绝对路径。它不会扩展变量并在 Firefox 和 xmlstarlet 中给出错误。
我有下一个文件: 我有下一个文件: <!ELEMENT notes (note+)> <!ELEMENT note (to, from, heading, body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> 和 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE notes SYSTEM "validation.dtd"> <notes> <note> <to>Alice</to> <from>Bob</from> <heading>Reminder</heading> <body>Don't forget our meeting!</body> </note> <note> <to>John</to> <from>Jane</from> <heading>Invalid Tag</heading> <body>This should be </body> </note> <note> <to>Tom</to> <from>Sara</from> <heading>Empty Tag</heading> <body>hello</body> </note> </notes> 和我的 Java 验证器 import org.xml.sax.Attributes; import org.xml.sax.SAXParseException; import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import java.io.File; public class SAXParserTest { public static void main(String[] args) { parseWithDTDValidation("C:\\Users\\ilapa\\Desktop\\university\\4_course_1_sem\\Проектування Веб сервісів\\lab_5\\lab5\\src\\main\\resources\\validation.dtd"); // parseWithXSDValidation("C:\\Users\\ilapa\\Desktop\\university\\4_course_1_sem\\Проектування Веб сервісів\\lab_5\\lab5\\src\\main\\resources\\index.xml", // "C:\\Users\\ilapa\\Desktop\\university\\4_course_1_sem\\Проектування Веб сервісів\\lab_5\\lab5\\src\\main\\resources\\XSDvalidation.xsd"); } private static void parseWithDTDValidation(String filePath) { try { SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setValidating(true); // Увімкнути валідацію по DTD SAXParser parser = factory.newSAXParser(); parser.parse(new File(filePath), new CustomHandler()); } catch (Exception e) { e.printStackTrace(); } } private static void parseWithXSDValidation(String filePath, String schemaPath) { try { SAXParserFactory factory = SAXParserFactory.newInstance(); SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); Schema schema = schemaFactory.newSchema(new File(schemaPath)); factory.setSchema(schema); SAXParser parser = factory.newSAXParser(); parser.parse(new File(filePath), new CustomHandler()); } catch (Exception e) { e.printStackTrace(); } } } class CustomHandler extends DefaultHandler { @Override public void startElement(String uri, String localName, String qName, Attributes attributes) { System.out.println("Start Element: " + qName); } @Override public void endElement(String uri, String localName, String qName) { System.out.println("End Element: " + qName); } @Override public void characters(char[] ch, int start, int length) { System.out.println("Characters: " + new String(ch, start, length).trim()); } @Override public void error(SAXParseException e) { System.out.println("Error: " + e.getMessage()); } @Override public void fatalError(SAXParseException e) { System.out.println("Fatal Error: " + e.getMessage()); } @Override public void warning(SAXParseException e) { System.out.println("Warning: " + e.getMessage()); } } 编译器给我下一个错误:`org.xml.sax.SAXParseException;系统ID:文件:src/main/resources/validation.dtd;行号:1;列数:3;文档中根元素之前的标记必须格式正确。 我检查 .dtd 验证和 xml 文件中的每个符号吗?但找不到任何语法错误 如果有人回答我的问题我会很高兴 看起来您正在尝试解析此代码行中的 validation.dtd 文件: parseWithDTDValidation("C:\\Users\\ilapa\\Desktop\\university\\4_course_1_sem\\Проектування Веб сервісів\\lab_5\\lab5\\src\\main\\resources\\validation.dtd"); 您可能应该将路径传递给 xml 文件本身。
仅在单个 .sgml 文件中,我有: [2af07e2f7] 仅在 单个 .sgml 文件中,我有: <ulink url="https://github.com/postgres/postgres/commit/2af07e2f7"> [2af07e2f7] </ulink> <ulink url="https://github.com/postgres/postgres/commit/165d581f1"> [165d581f1] </ulink>, <ulink url="https://github.com/postgres/postgres/commit/617f9b7d4"> [617f9b7d4] </ulink> 是否可以配置基本网址,这样我就不需要写了 https://github.com/postgres/postgres/commit一直吗? 所以它会变成这样: <ulink url="$variable/2af07e2f7"> [2af07e2f7] </ulink> 在这里:我们有 <xsl:param name="base.dir" select="'html/'"></xsl:param> https://git.postgresql.org/cgit/postgresql.git/tree/doc/src/sgml/stylesheet.xsl#n13 也许这有关系。 据我理解你的问题,你正在寻找 SGML/XML entity 机制(认为文本宏),例如 XML 配置继承,避免重复。 如果您实际上使用 SGML(而不是单纯的 XML),您还可以使用 系统特定的 实体在文档外部定义它们,并通过命令行参数或其他方式提供其内容。 SGML(SP 和 sgmjs)还通过从以实体引用命名的文件中提取内容来处理对未声明实体的引用(请参阅SGML 语法参考 - 实体)。
仅在单个 sgml 文件中,我有。 [2af07e2f7] 仅在一个单个 sgml 文件中,我有。 <ulink url="https://github.com/postgres/postgres/commit/2af07e2f7"> [2af07e2f7] </ulink> <ulink url="https://github.com/postgres/postgres/commit/165d581f1"> [165d581f1] </ulink>, <ulink url="https://github.com/postgres/postgres/commit/617f9b7d4"> [617f9b7d4] </ulink> 可以配置基本url,所以我不需要写 “https://github.com/postgres/postgres/commit” 一直吗? 所以它会变成这样: <ulink url="$variable/2af07e2f7"> [2af07e2f7] </ulink> 在这里:我们有 <xsl:param name="base.dir" select="'html/'"></xsl:param> https://git.postgresql.org/cgit/postgresql.git/tree/doc/src/sgml/stylesheet.xsl#n13 也许这有关系。 据我理解你的问题,你正在寻找 SGML/XML entity 机制(认为文本宏),例如 XML 配置继承,避免重复。 如果您实际上使用 SGML(而不是单纯的 XML),您还可以使用 系统特定的 实体在文档外部定义它们,并通过命令行参数或其他方式提供其内容。 SGML(SP 和 sgmjs)还通过从以实体引用命名的文件中提取内容来处理对未声明实体的引用(请参阅SGML 语法参考 - 实体)。
JEditorPane 中的 HTMLEditorKit 和自定义标签
我使用说明添加我自己的标签http://java-sl.com/custom_tag_html_kit.html 类 MyParserDelegator 扩展 ParserDelegator { 公共 MyParserDelegator() { 尝试 { 字段 f=javax....
当 eclipse 尝试根据其 DTD 验证 XML 时,我总是在 TestNG XML 配置文件中的测试标记(位于行 test name="Bing-Search-Sample...)处收到此错误。该文件是 wo ...
我想从 XML 文件中获取内部子集(DTD 的内部部分)。 DOMDocumentType 有一个 getInternalSubset() 方法,但我使用的是 SAX 解析器,而不是 DOM 解析器。我怎么可以...
我有一个问题需要解决。我的 WCF 服务器用 C# 代码编写,在加载时验证 XML 文件。在 XML 中,有一个 DTD URL 指向外部源以验证 XML a...
我正在尝试编写一个验证脚本,用于根据 NITF DTD 验证 XML,http://www.iptc.org/std/NITF/3.4/specification/dtd/nitf-3-4.dtd。基于这篇文章,我想出了以下内容
当我在 Oxygen 中使用 Saxon 运行以下模板时: 当我在 Oxygen 中使用 Saxon 运行以下模板时: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:math="http://www.w3.org/2005/xpath-functions/math" exclude-result-prefixes="xs math" expand-text="yes" version="3.0"> <xsl:output indent="yes" method="xml" omit-xml-declaration="no" encoding="utf-8"/> <xsl:template match="/"> <xsl:text>
</xsl:text> <xsl:apply-templates select="*"/> </xsl:template> <xsl:template match="*"> <!-- On Martin's suggestion I should use node-name instead of name, so I have changed this, but the result is the same. --> <xsl:value-of select="node-name()"/><xsl:text>
</xsl:text> <xsl:apply-templates select="*"/> </xsl:template> </xsl:stylesheet> 在此 xml 上: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ddn PUBLIC "-//S1000D//DTD Data Dispatch Note 20050501//EN//XML" "http://www.s1000d.org/s1000d_2-2/xml_dtd/ddn/dtd/ddn.dtd"> <ddn> <ddnc> <modelic>ABC</modelic> <sendid>AASSD</sendid> <recvid>VVBBN</recvid> <diyear>2024</diyear> <seqnum>00001</seqnum> </ddnc> </ddn> 我得到以下输出: <?xml version="1.0" encoding="utf-8"?> ddn ddnc modelic sendid recvid diyear seqnum 很明显(至少对我来说),变换知道元素名称。 如果我将与元素匹配的模板更改为: <xsl:template match="ddn"> <xsl:value-of select="node-name()"/><xsl:text>
</xsl:text> <xsl:apply-templates select="*"/> </xsl:template> 我得到以下内容,其中不包含任何元素名称: <?xml version="1.0" encoding="utf-8"?> ABC AASSD VVBBN 2024 0000 如果我删除文档类型声明并运行相同的转换,我会得到: <?xml version="1.0" encoding="utf-8"?> ddn ABC AASSD VVBBN 2024 00001 现在已经找到root ddn了。 结论是dtd被转换使用了。 我宁愿忽略 dtd,也不愿尝试纠正其中的某些内容,因为 dtd 本来就不是我的。我只需要转换我得到的文件的内容,而这个问题中包含的xml只是实际文件的一小部分,但无论内容是什么,问题都是一样的。 那么我该如何解决这个问题呢?我是否需要在我的规则中添加一些命名空间(尽管 name 函数没有产生类似的东西),或者我可以告诉 Saxon 忽略 dtd 吗?看起来好像这是设置中的默认设置,但我怀疑这里还缺少其他东西。 我已经尝试使用带有内置 xslt 引擎的 XMLSpy 进行相同的转换,并且其行为方式相同。 如果我像这样添加 * 作为命名空间: 如果我将与元素匹配的模板更改为: <xsl:template match="*:ddn"> <xsl:value-of select="node-name()"/><xsl:text>
</xsl:text> <xsl:apply-templates select="*"/> </xsl:template> 我得到: <?xml version="1.0" encoding="utf-8"?> ddn ABC AASSD VVBBN 2024 00001 所以这可行,但是为什么?!? 建议? 我下载了一些 DTD,它有 <!ELEMENT ddn (rdf:Description?,ddnc,issdate,security,datarest?, dispto,dispfrom,authrtn,mediaid?,remarks?,delivlst?) > <!ATTLIST ddn id ID #IMPLIED xmlns CDATA #FIXED "http://www.s1000d.org/ddn" %RDFDCATT; > 因此,基于此,对于任何非前缀元素,我希望在 XSLT 中声明 xpath-default-namespace="http://www.s1000d.org/ddn" 允许您选择和/或匹配 ddn、ddnc、issdate 等元素。
我正在为 xml 文档创建 DTD。我有一个 xml 元素的枚举属性。我的问题是:属性 Type 可以有空格吗? 例如: 我正在为 xml 文档创建一个 DTD。我有一个 xml 元素的枚举属性。我的问题是:属性Type可以有空格吗? 例如: <!ELEMENT Link (#PCDATA)> <!ATTLIST Link Type (Amendment|Reference|Superseded|Modified| Corrigendum|Corresponds|Endorsement|Equivalent|Identical|Modified| Not Equivalent|Note taken of|Related|Similar) "Reference"> 所以我想要的是: <Link Type="Not Equivalent" \> 但这似乎令人呕吐。当我说 barf 时,我的意思是当我尝试验证文档(例如在网络浏览器中打开它)时,我收到一条错误消息: ATTLIST 枚举中发现无效字符。错误处理 资源“file:///C:/myxmldocument.xml”。 ... 我需要对空间施一些魔法吗?还是只是运气不好? 我查看了几个点但没有看到任何参考 简短的回答是否定的。 Xml 属性是名称标记,并且名称标记不能包含空格。相关规格链接: 属性 属性类型(参见NotationType) 名称(参见 4a - NameChar) 无效字符是空格。您可以使用 '。'如果您愿意,也可以使用“-”作为分隔符。
我有这个xml文档: 本周鲜花 我有这个xml文档: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE catalog SYSTEM "plantdtd.dtd"> <catalog> <title>Flowers of the week</title> <plant id="A1"> <name>Aloe vera</name> <climate>tropical</climate> <height>60-100cm</height> <usage>medicinal</usage> <image>aloevera.jpg</image> </plant> <plant id="A2"> <name>Orchidaceae</name> <height>8-12in</height> <usage>medicinal</usage> <usage>decoration</usage> <image>Orchidaceae.jpg</image> </plant> </catalog> 我写了这样的DTD: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE catalog SYSTEM "file:/home/p10398/plantdtd.dtd" [ <!ELEMENT catalog(title,plant+)> <!ELEMENT title(#PCDATA)> <!ELEMENT plant(name,climate,height,usage,image)+> <!ELEMENT name(#PCDATA)> <!ELEMENT climate(#PCDATA)> <!ELEMENT height(#PCDATA)> <!ELEMENT usage(#PCDATA)> <!ELEMENT image(#PCDATA)> ]> 我收到此错误: 致命错误: 公共 ID:空 系统 ID:文件:/home/p14524/plantdtd.dtd 行号:4 列数:3 消息:文档类型包含或指向的标记声明 声明必须格式正确。 有人可以解释为什么我会收到此错误吗?或者正确的 DTD? 编辑和更新: 啊!谢谢丹尼尔。 现在之前的错误已经消失了。 我的新 DTD 是 <!ELEMENT catalog (title,plant+)> <!ELEMENT title (#PCDATA)> <!ELEMENT plant (name,climate,height,usage,image)> <!ELEMENT name (#PCDATA)> <!ELEMENT climate (#PCDATA)> <!ELEMENT height (#PCDATA)> <!ELEMENT usage (#PCDATA)> <!ELEMENT image (#PCDATA)> <!ATTLIST plant id ID #REQUIRED> 我收到这个新错误: 行号:18 列数:9 消息:元素类型“植物”的内容必须匹配“(名称、气候、高度、用途、图像)”。 您需要从 DTD 中删除 DOCTYPE。声明中的元素名称后面还应该有空格。 新DTD <!ELEMENT catalog (title,plant+)> <!ELEMENT title (#PCDATA)> <!ELEMENT plant (name,climate,height,usage,image)+> <!ELEMENT name (#PCDATA)> <!ELEMENT climate (#PCDATA)> <!ELEMENT height (#PCDATA)> <!ELEMENT usage (#PCDATA)> <!ELEMENT image (#PCDATA)> 现在 DTD 有效,您在验证 XML 时会看到一些错误。 首先,您需要声明 id 元素的 plant 属性。我建议<!ATTLIST plant id ID #REQUIRED>。 第二个是第二个 climate 中缺少 plant。我不确定这是 XML 错误还是 DTD 错误。 plant 的元素声明并没有多大意义,因为它是按该顺序排列的 5 个元素一次或多次。如果您需要有关该部分的帮助,请描述 plant 应包含哪些内容,我可以帮助您编写正确的声明。 “文档类型声明包含或指向的标记声明必须格式正确”错误 就我而言,我位于代理后面,所以我猜它导致了问题 <?xml version = "1.0" encoding = "UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 所以我将其更改为https <!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" > 我也遇到了同样的错误。但就我而言,它是这样解决的。在这里阅读完整的说明 我遇到的错误表明我的 XML 负载方式存在问题。在 XML 中,某些字符和结构具有特定的规则,任何偏离这些规则的行为都可能导致解析错误。 在我提供的有效负载中: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE test [<! ENTITY xxe SYSTEM "http://169.254.169.254/" >]> <stockCheck> <productId> &xxe; </productId> <storeId>2</storeId> </stockCheck> <!和ENTITY之间有空格,这可能会导致解析错误。尝试删除空格以使其<!ENTITY: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE test [<!ENTITY xxe SYSTEM "http://169.254.169.254/" >]> <stockCheck> <productId> &xxe; </productId> <storeId>2</storeId> </stockCheck> 如果问题仍然存在,请考虑确保您的 XML 负载遵守 XML 语法规则。另外,请验证是否存在可能导致解析错误的额外空格、无效字符或未闭合标签。
我的项目中有一个需求,需要在BizTalk中处理DTD类型的文件。目前,我正在进行可行性检查。我无法找到任何包含完整详细信息的博客。可以吗...
我正在尝试将外部 DTD 调用到我的 xml 文件,然后按如下方式进行: 我正在尝试将外部 DTD 调用到我的 xml 文件,我按照如下方式进行: <?xml version="1.0" encoding="UTF-8"?> <?xml-model href="https://digi.ub.uni-heidelberg.de/schema/tei/heiEDITIONS/tei_hes.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?> <?xml-model href="https://digi.ub.uni-heidelberg.de/schema/tei/heiEDITIONS/tei_hes.rng" type="application/xml" schematypens="http://purl.oclc.org/dsdl/schematron"?> <!DOCTYPE TEI [ <!ENTITY % heiEDITIONS_entities SYSTEM "https://digi.ub.uni-heidelberg.de/schema/tei/heiEDITIONS/declarations/heieditions-entities.txt"> %heiEDITIONS_entities; ]> 所有 DTD 实体都可以在 ENTITY 部分声明的地址处找到。 但是,当我在 xml 文件中遇到一个实体时,例如 &bar;,它表示该实体未声明。对于 ï 实体也是如此。尽管是当您看到 url 中的实体时!所以我不太明白。 我使用 Sublime text 作为文本编辑器。 我哪里做错了? 非常感谢 由于对 XML 外部实体 (XXE) 攻击的安全担忧,许多处理器现在默认禁用外部 DTD 获取。这会导致您的实体未定义。 根据工具/处理器的不同,您可能需要弄清楚如何启用外部实体解析。 https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
我正在 T-SQL 中使用 DTD 并使用以下代码: 使用客户; 声明 @xmlData XML; SET @xmlData = ' ]>&l...
由于我的学习,我正在学习 XML/DTD。现在我有一个练习,我必须在其中创建订单。一点是,我有两种不同类型的客户。一名学生和一名非学生。
是否可以将关系数据库架构映射到文档类型定义 (DTD) 然后开始填充 XML 文档。我得到了类似以下内容: 部门(A、B、C、D)和其他...
是否可以通过DTD中的参数实体重用`("0" | "1")`?
一些公司“抛弃”带有冗长冗长的标签描述的 XML,但从未做出任何努力来正式描述这种混乱的结构。 因此我试图从
我不久前开始使用 jQuery Mobile,了解 jQuery Mobile 的人都知道,它使用自己的 HTML 属性来为项目赋予预定义的角色。主要是div。 一些例子: 我不久前开始使用 jQuery Mobile,了解 jQuery Mobile 的人都知道,它使用自己的 HTML 属性来为项目提供预定义的角色。主要是div。 一些例子: <div data-role="page" id="trackPage"> <div data-role="header"> ... </div><!-- /header --> <div data-role="content" id="content_init"> <form action="DoTrack" method="post" id="track_form" data-ajax="false"> <div data-role="fieldcontain" id="div_trackselect"> <fieldset data-role="controlgroup" data-type="horizontal"> .... </fieldset> </div> </form> ... </div> ... </div> 如您所见,添加了许多 jQuery 属性,例如 data-role data-type data-ajax data-transition data-iconpos ... 现在,我更喜欢使用 XHTML 严格语法,但是在验证时出现了这些错误:http://cl.ly/400Q080G3X2V3j3x2S00 我也尝试了 XHTML Transitional,但它给出了相同的错误。 我尝试通过谷歌搜索找到解决方案,但找不到。我认为要解决这个问题,所有 jQuery Mobile 属性都应该存在一个 DTD,对吗? 还有其他方法可以解决这个问题吗? jQuery Mobile 主页明确指出: 一个统一的、基于 HTML5 的用户界面系统,适用于所有流行的移动设备平台... 因此,您应该使用 HTML5 文档类型。如果这对您很重要,这将确保您的页面有效。 <!DOCTYPE html> 不要忘记,如果您使用 HTML5 文档类型,您仍然可以使用 XHTML 样式语法。我想大多数人都是这样。 顺便说一句,jQuery Mobile 并没有创建自己的属性 - 它们不完全是“jQuery Mobile”属性 - data-* 属性系统 是 HTML5 的一部分,其存在是为了让您可以将任意数据附加到 DOM 节点。