对于XML 以及 DTD的一些了解

2019-03-07 18:00|来源: 网友

为什么加入DTD会有这么强大的功能...

看看百度百科 对DTD的定义:

(Document Type Definition)

  DTD 是一套关于标记符的语法规则。它是XML1.0版规格的一部分,是XML文件的验证机制,属于XML文件组成的一部分。

  DTD 是一种保证XML文档格式正确的有效方法,可以通过比较XML文档和DTD文件来看文档是否符合规范,元素和标签使用是否正确

  XML文件提供应用程序一个数据交换的格式,DTD正是让XML文件能够成为数据交换的标准,因为不同的公司只需定义好标准的DTD,各公司都能够依照DTD建立XML文件,并且进行验证,如此就可以轻易的建立标准和交换数据,这样满足了网络共享和数据交互。

  DTD文件是一个ASCII的文本文件,后缀名为.dtd。

   不同用途的xml文件, 会规定自己的一套DTD文档. 用来规范用户编写的xml文件

   以iBATIS的SqlMap文件为例

<span style="font-size: small;"><!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"  
   "http://ibatis.apache.org/dtd/sql-map-2.dtd"></span>

!DOCTYPE 指定了文档遵循的文档类型定义(DTD) , 说明该xml文档以dtd模式进行解析.

其中, PUBLIC 后面的跟的这串"-//ibatis.apache.org//DTD SQL Map 2.0//EN"  指的是指定dtd文件, 可以看成是个唯一的标识符

"http://ibatis.apache.org/dtd/sql-map-2.dtd" 则是dtd文件在官方网站的地址

我们可以利用这个官网地址, 把相对应的dtd文件下载下来. 加入到Eclipse中.

相关问答

更多
  • 是的,它可以。 虽然它不是必需的(即使在XML 1.1 DTD中 )。 从规格 : 格式良好约束:外部子集 外部子集(如果有)必须与extSubset的生产相匹配。 规范将extSubset定义为: [30] extSubset ::= TextDecl? extSubsetDecl [31] extSubsetDecl ::= ( markupdecl | conditionalSect | DeclSep)* 和TextDecl (允许在上面的定义中出现零 ...
  • 从将DTD转换为Schema文章的DTD和Schema部分之间的区别 : DTD和XML Schema之间的关键区别在于XML Schema使用基于XML的语法,而DTD具有从SGML DTD保存的唯一语法。 虽然DTD经常受到批评,因为需要学习一个新的语法,但语法本身就很简单。 XML Schema是相反的,这是冗长的XML Schema,也是使用标签和XML,以便XML的作者能够找到XML Schema的语法,而不会吓倒。 DTD的目标是保留与SGML的兼容性水平,以满足可能希望将SGML DTD转换为 ...
  • 那么从我可以读取我猜你的.dtd包含错误,而不是你的代码。 您是否检查过.dtd是否包含的定义,并且它是儿童? Well from what I can read I would guess your .dtd contains errors, not your code. Have you checked that the .dtd contains a definition for and it's children?
  • Parth - 试试这个 ]> Parth - Try this
  • 从这里开始 降低引用外部实体的成本部分。 它有关于如何缓存DTD的提示。 如果你从头开始,那么我建议你使用XSD。 关于如何缓存xsd,请关注以下SO帖子 XSD:大型模式验证 Go through the Reducing the Cost of Referencing External Entities section from here. It has a tip on how to cache DTD's. If you are starting from scratch then I'd sugg ...
  • 你不需要LINQ。 你会在这里找到一个例子; http://social.msdn.microsoft.com/Forums/en-US/xmlandnetfx/thread/782e8227-84aa-4e62-a77e-0801e8b8cb4c You don't need LINQ for that. You'll find an example here; http://social.msdn.microsoft.com/Forums/en-US/xmlandnetfx/thread/782e822 ...
  • XML规范明确指出,您给出的两种形式将被视为等效形式。 请参阅https://www.w3.org/TR/xml/#sec-starttags 它确实建议(应该),配对标签形式用于声明能够拥有内容的元素,而单标签形式用于声明为空的元素。 在既没有DTD也没有架构的应用程序中,这种区别是不可用的,而且我没有任何人在这个问题上关注规范建议的印象。 (这似乎是一个好主意。) [附录,后来]我最近有机会再次查看规范的相关部分,并且一位朋友提请我注意这样一个事实,即用于声明为EMPTY的 ...
  • PRODUCT的定义, 说, 必须包含一个元素,一个元素,依此类推。 但是从ATTLIST和你想要使用属性的示例代码。 所以只需将定义更改为 The definition of PRODUCT,
  • 我认为这是因为你的XML格式不正确 - 你有一个student元素的开始和结束标签,然后对另一个student元素再次相同,然后你有一个students元素的结束标签 。 但是你没有students元素的开始标签。 顺便提一下,第二个student元素中还有两个major元素,但是您的DTD指定只允许一个major元素。 请尝试以下操作,根据您的DTD有效:
  • 在您的DTD中, measurements声明需要是: 这是因为只有一种方法可以声明混合内容 。 此外,您已在DTD中声明了measurements (复数),但在您的XML中,您使用的是measurement (单数)。 您必须更改DTD或XML。 如果更改DTD,请不要忘记更改XML中的doctype声明。 另一件事是在DTD中将status属性声明为必需。 固定DTD和XML的示例.. ...