XML定义文档内容

XML的文档类型定义文件——DTD XML的文档类型定义文件——DTD DTD是一套完整的关于标记符的语法规则,它定义了文档中的元素、属性和实体以及它们之间的相互关系。 每个XML文档必须说明对哪个DTD有效 XML文档和DTD匹配 内部DTD <?xml version="1.0"> <!DOCTYPE[ <!-- DTD代码 --> ]> <page> <!-- 元素内容 --> </page> 外部私有DTD XML需要外部私有DTD时,可以把DTD保存在扩 阅读详情

DTD 允许您指定 XML 文档的基本结构。下面的几页将研究 DTD 片段。首先是定义本章中地址文档示例的基本结构的 DTD。

<!-- address.dtd -->
<!ELEMENT address (name, street, city, state, postal-code)>
<!ELEMENT name (title? first-name, last-name)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT first-name (#PCDATA)>
<!ELEMENT last-name (#PCDATA)>
<!ELEMENT street (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT state (#PCDATA)>
<!ELEMENT postal-code (#PCDATA)>

该 DTD 定义了样本文档中使用的所有元素。它定义了三个元素:

  • <address> 元素包含一个 <name>、一个 <street>、一个 <city>、一个 <state> 和一个 <postal-code>。所有这些元素必须出现,而且必须以这个顺序出现。
  • <name> 元素包含一个可选的 <title> 元素(问号表示 title 这个元素是可选的),后面跟有一个 <first-name> 和一个 <last-name> 元素。
  • 所有其它包含文本的元素。(#PCDATA 代表已解析字符数据;不能在这些元素中包含另一个元素。)

尽管 DTD 相当简单,但它清楚地说明了什么样的元素组合是合乎规则的。<postal-code> 元素在 <state> 元素之前的地址文档是不合乎规则的,没有 <last-name> 元素的文档也不合乎规则。

另外,请注意,DTD 语法不同于普通的 XML 语法。(相反,XML Schema 文档本身就是 XML,这导致一些有趣的结果)。尽管 DTD 的语法不同,但您仍可以将普通的注释放到 DTD 中。

DTD 中的符号

DTD 中有几个符号用于指出某元素在 XML 文档中可能会出现多少次(或是否出现)。下面是一些示例及其含义:

  • <!ELEMENT address (name, city, state)>

    <address> 元素必须包含一个 <name> 元素、一个 <city> 元素和一个 <state> 元素,并且符合上面的次序。所有的元素都是必需的。逗号表示项的列表。

  • <!ELEMENT name (title?, first-name, last-name)>

    这意味着 <name> 元素包含一个可选的 <title> 元素,后面必须跟有一个 <first-name> 和一个 <last-name> 元素。问号表示这一项是可选的;它可以出现一次或根本不出现。

  • <!ELEMENT addressbook (address+)>

    <addressbook> 元素包含一个或多个 <address> 元素。您可以有任意多的 <address> 元素,但必须至少有一个。加号表示这一项必须至少出现一次,但可出现任意次。

  • <!ELEMENT private-addresses (address*)>

    <private-addresses> 元素包含零个或多个 <address> 元素。星号表示这一项可以出现任意次,包括零次。

  • <!ELEMENT name (title?, first-name, (middle-initial | middle-name)?, last-name)>

    <name> 元素包含一个可选的 <title> 元素,后面跟有一个 <first-name> 元素,随后可能跟有一个 <middle-initial> 或 <middle-name> 元素,然后跟有一个 <last-name> 元素。换句话说,<middle-initial> 和 <middle-name> 都是可选的,而且您只能选择二者中的一个。竖线符号表示选择列表;您只能从列表选择一项。还要注意该示例用圆括号对特定元素进行分组,然后在这个组旁放上问号。

  • <!ELEMENT name ((title?, first-name, last-name) | (surname, mothers-name, given-name))>

    这个 <name> 元素可以包含两个序列中的一个:一个可选的 <title>,后面跟有一个 <first-name> 和一个 <last-name>;或一个 <surname>、一个 <mothers-name> 和一个 <given-name>。

如要定义一个 XML 文档的结构,您应该象在应用程序中设计数据库模式或数据结构那样事先考虑 DTD 或模式。您事先考虑的未来需求越多,以后实现它们就越容易而且成本越低

定义属性

  • 定义哪些属性是必需的
  • 定义属性的缺省值
  • 列出给定属性的所有有效值

假设您要更改 DTD,使 state 成为 <city> 元素的属性。下面演示如何做到这一点:


<!ELEMENT city (#PCDATA)>
<!ATTLIST city state CDATA #REQUIRED>
          

和以前一样,我们定义了 <city> 元素,但修改的示例还使用了 ATTLIST 声明来列出元素的属性。属性列表中的名称 city 告诉解析器这些属性是为 <city> 元素定义的。名称 state 是属性的名称,关键字 CDATA 和 #REQUIRED 告诉解析器 state 属性包含文本并且是必需的(如果它是可选的,用 CDATA #IMPLIED 即可)。

要定义元素的多个属性,可象下面那样编写 ATTLIST:


<!ELEMENT city (#PCDATA)>
<!ATTLIST city state CDATA #REQUIRED
               postal-code CDATA #REQUIRED>
          

该示例将 state 和 postal-code 都定义为 <city> 元素的属性。

最后,DTD 允许您定义属性缺省值,并列举属性的所有有效值:


<!ELEMENT city (#PCDATA)>
<!ATTLIST city state CDATA (AZ|CA|NV|OR|UT|WA) "CA">
          

上面的示例表明它仅支持来自亚利桑那州(AZ)、加利福尼亚州(CA)、内华达州(NV)、俄勒冈州(OR)、犹他州(UT)和华盛顿州(WA)的地址,并且缺省值是加利福尼亚州。这样,您就可以进行形式非常有限的数据验证。

XML 模式

  • XML 模式使用 XML 语法。换句话说,XML 模式是一个 XML 文档。这意味着您可以象处理任何其它文档一样处理模式。例如,您可以编写一个 XSLT 样式表,该样式表将 XML 模式转换成具有自动生成的 JavaScript 代码的 Web 表单,其中的 JavaScript 代码可以验证您输入的数据。
  • XML 模式支持数据类型。尽管 DTD 确实支持数据类型,但很明显这些数据类型是从发布的角度开发的。XML 模式支持 DTD 中的所有原始数据类型(诸如标识和标识引用之类的类型)。它们还支持整数、浮点数、日期、时间、字符串、URL 和其它对数据处理和验证有用的数据类型。
  • XML 模式是可扩展的。除了 XML 模式规范中定义的数据类型以外,您还可以创建自己的数据类型,并且可以基于其它数据类型派生出新的数据类型。
  • XML 模式有更强的表达能力。例如,您可以用 XML 模式定义任何 <state> 属性值不得超过 2 个字符,或定义任何 <postal-code> 元素的值必须与正则表达式 [0-9]{5}(-[0-9]{4})? 相匹配。

    下面是与原始名称和地址 DTD 相匹配的 XML 模式。它增加了两个约束:<state> 元素的值必须刚好是两个字符长,<postal-code> 元素的值必须与正则表达式 [0-9]{5}(-[0-9]{4})? 相匹配。尽管这个模式比 DTD 长很多,但它更清楚地表达了有效的文档看起来是什么样子。下面是模式:

    
    <?xml version="1.0" encoding="UTF-8"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <xsd:element name="address">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element ref="name"/>
            <xsd:element ref="street"/>
            <xsd:element ref="city"/>
            <xsd:element ref="state"/>
            <xsd:element ref="postal-code"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    
      <xsd:element name="name">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element ref="title" minOccurs="0"/>
            <xsd:element ref="first-Name"/>
            <xsd:element ref="last-Name"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    
      <xsd:element name="title"      type="xsd:string"/>
      <xsd:element name="first-Name" type="xsd:string"/>
      <xsd:element name="last-Name"  type="xsd:string"/>
      <xsd:element name="street"     type="xsd:string"/>
      <xsd:element name="city"       type="xsd:string"/>
    
      <xsd:element name="state">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:length value="2"/>
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>
    
      <xsd:element name="postal-code">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:pattern value="[0-9]{5}(-[0-9]{4})?"/>
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>
    </xsd:schema>
    定义模式中的元素
    XML 模式用 <xsd:element> 元素定义了一些 XML 元素。头两个定义的元素(<address> 和 <name>)由其它元素组成。<xsd:sequence> 元素定义了包含在这两个元素中的元素的序列。下面是示例:
    
    <xsd:element name="address">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element ref="name"/>
          <xsd:element ref="street"/>
          <xsd:element ref="city"/>
          <xsd:element ref="state"/>
          <xsd:element ref="postal-code"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>
              
    

    与 DTD 版本一样,XML 模式示例定义 <address> 包含一个 <name>、一个 <street>、一个 <city>、一个 <state> 和一个 <postal-code> 元素,并且依照上面的次序。请注意,该模式实际上用 <xsd:complexType> 元素定义了新的数据类型。

    大多数元素包含文本;定义它们很简单。您只要声明新的元素,然后指定它的数据类型为 xsd:string:

    
    <xsd:element name="title"      type="xsd:string"/>
    <xsd:element name="first-Name" type="xsd:string"/>
    <xsd:element name="last-Name"  type="xsd:string"/>
    <xsd:element name="street"     type="xsd:string"/>
    <xsd:element name="city"       type="xsd:string"/>
    
    定义模式中的元素内容

    样本模式为两个元素的内容定义了约束:<state> 元素的内容必须是两个字符长,而 <postal-code> 元素的内容必须与正则表达式 [0-9]{5}(-[0-9]{4})? 匹配。下面演示如何做到那一点:

    
      <xsd:element name="state">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:length value="2"/>
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>
    
      <xsd:element name="postal-code">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:pattern value="[0-9]{5}(-[0-9]{4})?"/>
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>
              
    

    对于 <state> 和 <postal-code> 元素,模式用约束定义了新的数据类型。第一个情况使用 <xsd:length> 元素,而第二个情况则使用 <xsd:pattern> 元素定义该元素必须匹配的正则表达式。

XML文档类型定义---XML Schema Schema概述 XML Schema是2001年5月正式发布的W3C的推荐标准,经过数年的大规模讨论和开发如今终于尘埃落定,成为全球公认的XML环境下首选的数据建模工具。  使用DTD虽然带来较大的方便,但是,DTD存在一些缺陷:一是它用不同于XML的语言编写,需要不同的分析器技术。这增加了工具开发商的负担,降低了软件瘦身的可能性,此外开发人员需要多学一门语言及其语法。而XM 阅读详情

相关推荐

一个Android应用层开发如何转型深入Android Framework?

不知何时起,单纯的Android应用层开发越来越少了,主流技术演变也越来越快,从之前的rxjava到如今的协程,从之前MVC到如今的MVVM,还有Flutter、Compose等技术,可以说是日新月异。

m0_64420071的博客 1910

xml的文档定义和dtd简单入门

xml的文档定义和dtd简单入门

aaabea的博客 405

从智能手机到汽车电子:聊聊IPC-9702/9704A标准如何帮我们搞定不同场景下的PCB可靠性设计

本文探讨了IPC-9702/9704A标准在智能手机和汽车电子等不同场景下的PCB可靠性设计应用。通过分析消费电子、汽车电子和工业设备中的应力特征,详细解读了IPC标准在应变识别和测试方法论中的核心价值,并提供了具体的轻量化设计策略和全生命周期验证方案,帮助工程师提升PCB的长期可靠性。

weixin_30693683的博客 279

XML示例

XML既可单独作为XML文档存在,也可内嵌于网页,同时也可以作为一个外部文件插入网页中。值得注意的是,XML中的内容与表现形式是分开的。   XML并没有定义数据文件中数据出现的具体规范,而是在数据中附加一个标记来表达数据的逻辑结构和含义。每一个标记表示的意义由对应的DTD(D

找个地方放一下 1463

ABP框架实战:从零搭建多租户应用(含完整代码示例)

本文详细介绍了如何使用ABP框架从零构建多租户SaaS应用,涵盖多租户架构设计、数据隔离实现、租户管理及性能优化等核心内容。通过完整的代码示例,帮助开发者快速掌握企业级数据隔离系统的开发技巧,提升SaaS应用开发效率。

weixin_29247219的博客 263

用Proteus8.9自带STM32F401VE的Controller仿真STM32F407ZGT6,F429IGT6

@用Proteus8.9自带STM32F401VE的Controller仿真STM32F407ZGT6,F429IGT6 一, 目前得到的 Proteus8.9版本软件能够支持的Cortex-M4固件库项目,只能到达STM32F401VE (如下图1所示)。 (图1) 作为ST公司Cortex-M4更为广泛应用的F407,F429系列芯片;现在的Proteus8.9版本软件还没有固件库支持,不能...

kaillen的博客 3万+

XML文档类型定义(DTD)

1、格式良好的 XML文档符合语法的XML文档称为结构良好的XML文档 。 2、有效XML文档有效XML文档:内容结构严格遵守它自身的标记说明,能通过自身的语法检查;通过DTD验证的XML文档称为有效的XML文档 。 格式良好的XML文档与有效的XML文档的区别? 有效地XML文档肯定是格式良好的XML文档。反过来,一个格式良好的XML文档不一定是有效的XML文档。有效的XML文档...

238

ROBOGUIDE教程:FANUC机器人X型焊枪气动点焊焊接

FANUC机器人X型焊枪气动点焊焊接虚拟仿真实现方法。

IndRobSim 4385

XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来源SGML SGML(SGM)标准通用标记语言 是一种定义电子文档结构和描述其内容的国际标准语言,具有极好的扩展性 是所有电子文档标记语言的起源,早在万维网发明之前“通用标言”就已存在 是1...

noteless的博客 353

泛微E9开发 明细表字段赋值到主表字段,将各类型合计赋值到主表类型合计中

①绑定明细表类型、预计金额字段的值改变事件,每当有值发生改变,就需要重新计算供应商1、供应商2、供应商3的合计,如果不绑定这两个字段的话,会出现计算不及时或计算错误的问题。②当有明细行被删除时,也需要重新计算供应商1、供应商2、供应商3的合计,比如删除了供应商1的明细行,如果不重新计算,那么供应商1的值还是被删之前的值,合计错误。将各类型合计赋值到主表类型合计中。

a_waste_only的博客 3836

Azure AI-102 认证全攻略: (二十八) 设置 Azure AI 服务 API

在本文中,您学习了如何通过 Azure 门户设置和管理 Azure AI 服务,以及如何通过编程方式访问这些服务。在这篇文章中,我们将深入探讨如何设置 Azure AI 服务,特别是如何通过 Azure API 来进行编程访问,以实现自动化和集成。通过本篇文章的学习,您不仅能够顺利完成 Azure AI-102 认证中的 API 配置和集成内容,还能高效地管理和优化 Azure AI 服务,构建稳定、可靠的 AI 应用。在成功设置并测试了 API 后,接下来要管理和维护您的 Azure AI 服务。

高校图书馆高级系统架构师/研究馆员,推动高校AI从概念演示到可评审、可交付、可运维:路线图与立项评审、PoC交付、评测回归与上线运维(Baseline/Eval/Ops)。 1445

XML的内容

XML&JSON(8.31&9.01&9.02) XML简介: XML是跨平台的语言,它不需要安装任何环境的语言, 它是所有语言所共有的,单独的语言,并且不是所有语言内部的。 它是让所有语言去和xml交互 。 注意:html前身是xml <></>(整体)这就是标记(标签) 注意点:标签可以随便写(自定义不会报错),所以叫可扩展。 ==》不像Java 很严格。 标记语言 注意点:自定义的标签也不会报错 1.XML定义: 可扩展标记语言(1.标记 2.可扩展)

m0_51945098的博客 3120

超硬核实操!DeepSeek 全方位赋能嵌入式工程师,干货满满

摘要:本文聚焦 DeepSeek 大语言模型在嵌入式开发中的实操应用。开篇阐述其在开发前期助工程师精准理解需求、规划架构;代码编写阶段,可生成补全代码、助力算法实现与优化;调试测试时,能定位问题、生成测试用例;学习阶段,帮整理资料、规划学习路径。文中借助 Python 实现与模型交互,提供大量实操流程与代码示例。虽存在不足,但实操彰显其巨大潜力,为嵌入式工程师提供高效工作新思路与全面实操指南。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2001

XML入门(3)- 定义文档内容

概述迄今为止,您已经在本教程中了解到了 XML 文档的基本规则;那当然很好,但您需要定义将用来表示数据的元素。您将在本章了解做到那一点的两种方法。 一种方法是使用文档类型定义(Document Type Definition),或简称 DTD。DTD 定义可以在 XML 文档中出现的元素、这些元素出现的次序、它们可以如何相互嵌套以及 XML 文档结构的其它详细信息。DTD 是最初的 XML 规范的

灰虫轨迹 1087

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

android将xml文档中自定义标签中的内容取出

将xml文档中自定义标签中的内容取出,先获取xml文档,然后通过while循环(循环条件是不能到达文档结尾)对xml进行遍历,在遍历时,先判断是否为指定的开始标记,如果是则获取个属性,否则遍历下一个标记,一直遍历到文档结尾

u013509849的博客 776

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

XML DTD文档定义语法汇总

本文是对XML DTD文档定义语法的汇总,更深入和详细的DTD说明,请参考相关文档。 如果大家对XML相关的标准或XML相关信息,可以到http://www.w3school.com.cn去学习。 希望本文能对你的开发中起到帮助! 文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD 可被成行地声明于 XML 文档中,也可作为一个外...

amkgae9654的博客 185

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

XML學習筆記(一)

 XML文檔包含三部分:1. 一個XML文檔聲明.2. 一個關於文檔类型的定义.(元素的定义和关系都完全符合XML标准,則不需要特别的DTD文件来定义,可以省略DTD定义)3. 用XML标识创建的內容.舉例說明:      9301    51401111    0    BOU    CLI    0000    0    0043            1111111111    888842

Leon 784

XSD文件与XML文件有什么关系

原文链接:http://bbs.csdn.net/topics/240033131 总结一下网上的说法:       XML Schema描述了XML文档的结构。可以用一个指定的XML Schema来验证某个XML文档,以检查该XML文档是否符合其要求。文档设计者可以通过XML Schema指定一个XML文档所允许的结构和内容,并可据此检查一个XML文档是否是有效的。XML Schema本

yanguo110的博客 7675

XML Schema 复合类型 - 混合内容

在 XML Schema 中,可以使用元素定义混合内容。通过将元素的mixed属性设置为true,可以指定该类型允许混合内容。在这个示例中,是一个混合内容的复合类型,它扩展了xsd:string类型,并允许包含bold和italic元素。

lsx202406的博客 546

XML Schema 复合空元素

复合空元素是一种复杂类型元素,它不包含任何文本内容或子元素,但可以包含属性。在 XML Schema 中,复合空元素通过元素定义,并且在其内部使用和元素来指定它是一个空元素。在这个例子中,我们定义了一个名为的复杂类型,它包含一个名为的属性,该属性的类型为xsd:string。复合空元素是 XML Schema 中一种特殊类型的复杂元素,它不包含任何文本内容或子元素,但可以包含属性。通过使用复合空元素,我们可以更准确地描述和验证 XML 文档的结构和内容。

xyq2024的博客 312

W3school 之 XML DTD 内容摘录

虽然DTD 将被schema取代,但目前在一些应用上还是有DTD来定义的XML,只为了解一点。 内容原址http://w3school.com.cn/   DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。 它使用一系列的合法元素来定义文档结构。可被成行地声明于 XML 文档中,也可作为一个外部引用。 1.假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法...

Myblog 169

xml的语法

xml的文档声明: 如果要想写一个xml文档,则第一步一定要写文档声明 一般格式为:&lt;?xml version="1.0" encoding="utf-8"?&gt;         注意:文档声明一定在第一行第一列    否则内容不会显示在浏览器上              version----xml的版本              encoding----xml的编码格式(g...

Gray_humor的博客 434

xml

Tip:DTD约束快束入门 Tip: DTD 的语法细节:元素定义1 如为元素类型,则直接书写,DTD规范定义了如下几种类型: EMPTY:用于定义空元素,例如 ANY:表示元素内容为任意类型。 Tip: DTD 的语法细节:元素定义2 元素内容中可以使用如下方式,描述内容的组成关系  元素内容使用空白符分隔,表示出现顺序没有要求: ×  用逗号分隔,表示内容的出现顺序

Code大蛇丸 527

xml dtd 定义元素

ANY 如果需要定义某个元素的值可以是任意类型,可采用如下语法 <!ELEMENT 元素名 ANY> DTD必须定义XML文档中允许出现的所有元素,所以下面这样是不行的,因为<hellotag>没有在dtd中定义过 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE messages[ ...

weixin_30847271的博客 103

XML约束——DTD

DTD(DocumentType Definition),全称为文档类型定义。 定义:在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。常见的约束技术有     1、XML    DTD     2、XML    Schema 编写方式: DTD约束即可以作为一个单独的文件编写,也可以在XML文件内编写。   引用DTD约束 XML文件使用 DOCTYP

欢迎来到跃行者技术博客 1300
上一篇: XML的文档规则
下一篇: 文档对象模型
wwwphp
博客等级 码龄24年 5粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值