XML之dtd

目录:

   一.什么是格式良好XML

       为什么要学XML

        XML的作用:

           1.数据交互

            2.做配置

        标准的XML格式

   二.元素定义

        在XML加入DTD声明

         元素分类

         元素的额限制

   三.属性定义

        语法

        属性类型Type

       属性描述

一.什么是格式良好XML

       

格式良好的XML(eXtensible Markup Language)是指XML文档按照规范的语法和标准的标记规则编写,其中每个元素都被正确地嵌套和关闭,属性值使用正确的引号,并且符合XML相关规范。这种格式的XML文档能够被最终用户以及计算机程序正确地读取和解析,并且具有容易阅读和维护的优点。

  为什么要学XML:

  1. 与其他格式兼容:XML是一种非常灵活的文本格式,可以轻松地与许多其他软件和语言一起使用。它通常被用作各种领域的数据交换格式,并被广泛应用于Web服务、数据库、电子商务、移动应用等领域。

  2. 处理复杂数据:XML在数据建模和存储方面非常强大,可以帮助处理和组织任意结构的数据。由于XML的可扩展性和丰富的标记语言,它可以轻松地表示复杂的数据关系和包含递归元素,使其成为处理数据密集型的应用程序的极佳选择。

  3. 易于理解和学习:XML使用标记和结构来定义文本中的数据,使其易于读取、解析和理解。它的语法简单明了,与HTML类似,因此易于学习和实现。

  4. 支持数据验证和数据交换:XML可以使用DTD或Schema等结构来验证数据,确保数据的正确性和完整性;同时,XML也可以用作各种系统之间的通用格式,便于系统之间的数据交换和互操作。

  XML的作用:

  1. 数据交换和存储:XML是一种通用的数据格式,可以用于数据交换、存储和传输,与Python、Java、PHP等各种编程语言和Web技术无缝集成,广泛应用于电子商务、金融、医疗、移动应用和半导体制造等领域。

  2. 数据建模和描述:XML可以用作数据建模语言,用于描述数据结构、元数据、文档和业务规则。它可以根据特定的需求定义合适的数据模式,并提供有效的数据字典和说明文档。

  3. 数据验证和处理:XML可以通过定义相应的DTD或Schema来验证和处理数据。这些定义规则可确保XML文档与特定模式或格式相匹配,并在应用程序处理和处理数据时更加可靠和稳定。

  4. 数据发布和检查: XML可以用于发布和共享信息,例如RSS、Atom等网站新闻源,以及SOAP、REST等Web服务。XML也可以用于检索和查询文档和数据库,如XPath和XQuery等查询语言。

           1.数据交互:

这段代码演示如何解析名为"employees.xml"的XML文件。每个employee元素都包含包括id、firstName和lastName在内的信息。在这个例子中,我们使用DOM解析器来读取XML数据,并将其转换为Java中的对象,以便在Java代码中进行操作。



public class XmlParserExample {
    public static void main(String[] args) {
        try {
            // 创建DOM Parser
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();

            // 解析XML文件
            Document doc = builder.parse("employees.xml");

            // 获取所有 employee 元素 
            NodeList employees = doc.getElementsByTagName("employee");

            // 遍历每个 employee 元素
            for (int i = 0; i < employees.getLength(); i++) {
                Element employee = (Element) employees.item(i);
                String id = employee.getAttribute("id");
                String firstName = employee.getElementsByTagName("firstName").item(0).getTextContent();
                String lastName = employee.getElementsByTagName("lastName").item(0).getTextContent();
                System.out.println("Employee " + id + ": " + firstName + " " + lastName);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

            2.做配置:

<?xml version="1.0" encoding="UTF-8"?>
<database>
    <server>localhost</server>
    <port>3306</port>
    <dbname>mydb</dbname>
    <username>user</username>
    <password>password</password>
</database>

  标准的XML格式:

XML标准指的是XML文档的结构和语法规范。XML标准由W3C制定和管理,主要由三个部分组成:XML、XML命名空间和XML模式。其中,XML指的是可扩展标记语言,是一种用于传输和存储数据的文本格式。

   

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <employee>
      <id>小狗子</id>
      <firstName>John</firstName>
      <lastName>Doe</lastName>
      <email>john.doe@example.com</email>
      <phone>123-456-7890</phone>
   </employee>
   <employee>
      <id>小流氓</id>
      <firstName>Jane</firstName>
      <lastName>Smith</lastName>
      <email>jane.smith@example.com</email>
      <phone>123-456-7890</phone>
   </employee>
</root>

  

二.元素定义:

XML元素,也称为XML标签,是XML文档的基本组成单元,是用于存储、传输和处理数据的标记符号。每个XML元素由开始标记、结束标记和中间的数据组成。开始标记和结束标记都是用一对尖括号"<" 和 “>” 包围的字符序列,中间的数据是元素的内容。

以下是XML元素的定义格式:

<element>content</element>

在这个格式中,<element>是元素的开始标记,</element>是结束标记,content是元素的内容。XML元素也可以没有内容,例如:

<empty-element/>

在这个例子中,使用斜杠和尖括号表示该元素没有内容。

XML元素可以具有属性,这些属性用于存储元素的附加信息。属性是元素的一个名称或值对,位于开始标记内。例如:

<book id="101">
    <title>The Great Gatsby</title>
    <author>F. Scott Fitzgerald</author>
    <year>1925</year>
</book>

在这个例子中,<book>元素具有一个id属性,该属性储存了该元素的唯一标识符。属性值须用引号(单引号或双引号)包围。

XML元素的命名遵循某些规则,包括:

  • 名称必须以字母或下划线开头;
  • 名称不能以数字或标点开头;
  • 名称只能包含字母、数字、下划线、短横线、点、冒号和非ASCII字符;
  • 名称必须在整个文档中唯一。

        在XML加入DTD声明

在XML中加入DTD声明

要在XML中加入DTD声明,可以在XML文件的开头添加以下行:

<!DOCTYPE 根元素名 SYSTEM "DTD文件路径">

其中,<!DOCTYPE>是DTD声明的关键字,根元素名是XML文件中根元素的名称,DTD文件路径是DTD文件的路径。举例来说,假设XML文件的根元素为myroot,DTD文件名为mydtd.dtd,则在XML文件的开头应添加以下行:

<!DOCTYPE myroot SYSTEM "mydtd.dtd">

 

         元素分类:

              空元素:

DTD中的空元素是一种没有内容的元素。它们通常用于声明只有一个标记的元素。

DTD中可以使用“EMPTY”或“ANY”关键字来表示空元素。其中,"EMPTY"表示该元素没有子元素且没有内容,而"ANY"表示该元素允许包含任何内容。

例如,以下是定义一个空元素 “image” 的 DTD:

<!ELEMENT image EMPTY>
<!ATTLIST image
    src     CDATA   #REQUIRED
    alt     CDATA   #IMPLIED
    width   CDATA   #IMPLIED
    height  CDATA   #IMPLIED
>

               文本元素:

DTD中的文本元素用于定义包含纯文本信息的元素,这些元素不能包含其他元素或标记,只能包含文本内容。

在DTD中可以使用“ (#PCDATA)”关键字表示文本元素。其中,“#PCDATA”代表解析器可以解析的“解析器数据”,即文本数据。

例如,以下是一个定义为文本元素的DTD示例:

<!ELEMENT message (#PCDATA)>

上述示例中,定义了一个名为 “message” 的元素,并使用 “(#PCDATA)”关键字来表示该元素只能包含纯文本内容,不能包含其他元素。

在XML文档中,可以使用文本元素来表示短语、说明、注释等纯文本内容。例如:

<message>Hello World!</message>

               混合元素:

DTD中可以使用混合模式来定义元素内容,即 XML 元素可以同时包含文本和其他元素。

在混合模式中,可以使用“(#PCDATA)”表示可以包含文本,同时也可以使用其他元素的名称表示可以包含其他元素。在语法中,可以使用“ | ”或“,”分隔符表示可以包含多种内容。

例如,以下示例中定义了一个混合元素:

<!ELEMENT person (#PCDATA | name | age | gender)*>

上述示例中,“person” 元素的内容可以包含任何次序的文本或者 “name”、“age” 和 “gender” 元素。其中“ * ”表示可以出现 0 次或多次。

在 XML 文档中,混合元素可以像下面这样使用:

<person>
   My name is <name>John Doe</name>.
   I am <age>30</age> years old and my gender is <gender>male</gender>.
</person>

上述示例中, “person” 元素的内容中混合了文本和三个其他元素。

 

         元素的额限制:

例如,以下是一个限制出现次数的 DTD 示例:

<!ELEMENT message (greeting, text, signature?)>

上述示例中,“ signature?” 代表该元素为可选元素,出现 0 次 或 1 次。

上述示例中,“ () ” 中的元素依次排列,表示在 XML 文档中, “ greeting ” 节点必须先出现, “ text ” 节点出现在 “ greeting ” 后面,最后可选地出现 “ signature ” 节点。

通过以上方式,我们可以在 DTD 中灵活地定义元素的出现次数和顺序。这有助于确保 XML 文档符合指定的格式和结构。

在元素类型定义中,可以使用括号和逗号来限制元素的出现顺序。例如,以下是一个限制元素出现顺序的 DTD 示例:

<!ELEMENT message (greeting, text, signature?)>

  1. 在 DTD 中,可以使用以下方式来限制元素的出现次数和顺序:

  2. 限制元素出现次数:
  3. 在元素类型定义中,可以使用以下符号来限制元素出现次数:

  4. “?”:表示该元素出现 0 或 1 次。
  5. “*”:表示该元素出现 0 次或任意多次。
  6. “+”:表示该元素必须出现至少一次。
  7. 限制元素出现顺序:

 三.属性定义:

在XML DTD中,可以使用<!ATTLIST>声明来定义元素的属性,<!ATTLIST>用于定义一个元素可用的属性及其值域和默认值等信息,语法格式如下:

<!ATTLIST 元素名 
  属性名1 属性类型1 属性默认值1 
  属性名2 属性类型2 属性默认值2 
     ... 
  属性名n 属性类型n 属性默认值n>

其中,元素名为要定义属性的元素名称,属性名属性类型属性默认值分别为属性的名称、类型和默认值。每个属性的定义需占用一行,各个属性定义之间必须以空格或制表符分隔。

以下是一个例子:

<!ELEMENT book (title, author)>
<!ATTLIST book
          id CDATA #REQUIRED
          lang CDATA "en"
          edition CDATA "1">

       语法:

<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to (#PCDATA)>
  <!ELEMENT from (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body (#PCDATA)>
  <!ATTLIST note date CDATA #IMPLIED>
]>

       属性类型Type

       下面是几种常见的属性类型:

  1. CDATA:表示普通的字符串,即标准文本;

  2. NMTOKEN:表示不含空格或其他分隔符的标记名称,如元素和属性的名称;

  3. ID:表示一个唯一的标识符,不能重复,并且只能出现一次;

  4. IDREF:表示一个对文档中某个元素的唯一引用,只能引用元素ID;

  5. IDREFS:表示一个对文档中多个元素的唯一引用,可以引用多个元素ID,用空格分隔;

  6. ENTITY:表示一个外部实体的名称,与 ENTITY 声明一起使用;

  7. ENTITIES:表示多个外部实体的名称,可以用空格分隔;

  8. NOTATION:表示专门用于标识一种特定类型的属性值,与 PUBLIC 和 SYSTEM 声明一起使用。

属性类型 Type 需要在 DTD 中进行声明。例如,要声明 ID 和 CDATA 类型的属性:

<!ELEMENT person (name, email)>
<!ATTLIST person
  id ID #REQUIRED
  email CDATA #REQUIRED>

这个 DTD 将元素 person 定义为必须拥有 ID 和 email 属性,并且 ID 属性值必须是唯一的。

       属性描述:

XMLDTD 指的是 XML Document Type Definition,它是一种用于定义 XML 文档结构的语法规则。在 XMLDTD 中,可以使用属性描述来定义 XML 元素的属性。属性描述定义了属性的名称、数据类型、默认值和可选项,以及其他限制和规则。

属性描述可以包含以下内容:

  1. 属性名称:使用属性名称来定义属性。

  2. 属性数据类型:使用数据类型来限制属性的取值范围。

  3. 属性默认值:使用默认值来指定未提供属性值时的默认值。

  4. 属性可选项:使用可选项来定义属性是否必填。

  5. 属性其他限制和规则:使用其他限制和规则来定义属性的其他限制和规则,比如允许的最小值、最大值等。

例如,以下是一个示例 XMLDTD 的属性描述:

<!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)>

<!ELEMENT to (#PCDATA)>

<!ELEMENT from (#PCDATA)>

<!ELEMENT heading (#PCDATA)>

<!ELEMENT body (#PCDATA)>

<!ATTLIST note date CDATA #IMPLIED priority (high|normal|low) "normal" >

]>

在上面的示例中,note 元素定义了两个属性:date 和 priority。其中 date 属性的数据类型是 CDATA,表示可以包含任意字符数据;priority 属性的数据类型是一个枚举类型,取值必须是 high、normal 或 low 之一。同时,priority 属性还指定了一个默认值 normal。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值