
文档教程【免费下载链接】learnxinyminutes-docsCode documentation written as code! How novel and totally my idea!项目地址https://gitcode.com/gh_mirrors/le/learnxinyminutes-docs点击查看免费下载本文基于 Learn X in Y minuteslearnxinyminutes仓库中的荷兰语教程nl/xml.md展开完整继承其中的书店boekenwinkelXML 示例、属性与元素两类数据的辨析以及外部/内部 DTD 校验文档并结合英文原版xml.md和仓库的 frontmatter 校验脚本讲解 XML 文档从书写、解析到结构约束验证的完整流程。读完本文后你将能够独立写出良构well-formed的 XML 文档、区分属性与元素的适用场景并会用 DTD 声明元素结构、子元素顺序和属性默认值。XML 的定位只承载数据不规定展示nl/xml.md开篇给出的定义是XML 是一种为存储和传输数据而设计的标记语言een markuptaal die ontwikkeld is om data in te bewaren en data mee te verzenden。与 HTML 的核心区别在于XML 不规定数据如何显示或排版它只负责承载数据本身。这一内容与标记分离的定位决定了 XML 的典型用途配置文件、数据交换格式、文件元数据如本仓库每篇教程的 frontmatter 就是结构化的文档元数据。仓库的 CONTRIBUTING.md 还说明了 frontmatter 中contributors、translators等字段的取值约定而 lint/frontmatter.py 会对所有 Markdown 文件的 frontmatter 做键名白名单与类型校验允许的键为name、category、filename、contributors、translators等——这与 XML 用 DTD 约束文档结构的思路一脉相承把结构约束从应用逻辑中抽离出来交给专门的校验层。XML 语法元素、属性与树结构nl/xml.md用一个完整的书店文档演示 XML 语法这份示例完整继承如下!-- Dit is commentaar in XML -- ?xml version1.0 encodingUTF-8? boekenwinkel boek categorieKOKEN title taalnlAlledaags Italiaans/titel auteurGiada De Laurentiis/auteur jaar2005/jaar prijs30.00/prijs /boek boek categorieKINDEREN titel taalnlHarry Potter/titel auteurJ K. Rowling/auteur jaar2005/jaar prijs29.99/prijs /boek boek categorieWEB titel taalenLearning XML/titel auteurErik T. Ray/auteur jaar2003/jaar prijs39.95/prijs /boek /boekenwinkel这段代码承载了教程的全部基础概念XML 声明prolog?xml version1.0 encodingUTF-8?是可选但推荐的声明携带版本与编码等元数据位于文档最前面。注释!-- ... --可跨越多行文档中大量注释被直接嵌在示例代码里解释每一部分。树结构XML 按树形组织。此例中根节点stamknoop是boekenwinkel它的三个子节点都是boek而每个boek又有titel、auteur、jaar、prijs四个子节点层层嵌套。开闭标签成对节点由开标签与闭标签围合子节点必须位于父节点的开闭标签之间。值得注意的一个细节原文第一本书中写作title taalnlAlledaags Italiaans/titel——开标签是title闭标签却是titel两者并不匹配。这恰好反证了教程后文强调的原则XML 解析器设计得非常严格遇到语法不合规范的文档会直接停止解析。开闭标签名不一致的文档不是良构 XML任何符合规范的解析器都会在此报错。对照英文原版 xml.md同一示例写作title langenEveryday Italian/title开闭标签一致是良构的。两类数据属性与元素教程明确区分了 XML 中的两类数据属性attributen——节点的元数据以naamwaarde的形式写在开标签内如boek的categorieKOKEN、titel的taalnl。属性通常由解析器用来以正确方式组织和读取数据因此适合放标识符、分类、语言代码这类描述性信息。元素elementen——纯数据本身位于开闭标签之间由解析器从 XML 文件中提取如30.00、2005。教程随后给出一个同时带两个属性的元素示例!-- Hieronder staat een element met twee attributen -- bestand typegif id4293computer.gif/bestand元素内容computer.gif与属性typegif id4293各司其职文件名是数据类型和 ID 是元数据。英文原版 xml.md 在此部分还补充了几条与解析行为强相关的规则值得一并掌握元素名区分大小写element /与eLEMENT /是不同的元素空元素与非空元素element1 attributevalue /不承载内容element2 attributevalueContent/element2则包含内容嵌套遵循树的术语上一级称 parent父下一级称 children子同一父节点下的节点互为 siblings兄弟XML 保留空白child\n Text\n/child与childText/child在解析后内容不同处理时需要自行处理缩进空白。良构性Well-formedness与验证Validatie教程第二部分的核心命题可以概括为两层判定语法正确 / well-formatted良构只要 XML 语法正确标签配对、有唯一根、属性带引号等文档就是良构的valid有效/合法在良构之上若文档符合某份文档定义DTD 或 XML Schema声明的结构约束则称为相对于该定义valid。教程指出借助这类工具可以在应用逻辑之外对 XML 数据进行结构校验——这正是把数据长什么样的约束从业务代码中剥离、交由声明式 schema 维护的价值。外部 DTD!DOCTYPE ... SYSTEM file.dtd教程给出了一个为书店文档补充 DTD 定义的版本完整继承如下?xml version1.0 encodingUTF-8? !DOCTYPE note SYSTEM boekenwinkel.dtd boekenwinkel boek categorieKOKEN titelAlledaags Italiaans/titel prijs30.00/prijs /boek /boekenwinkel其中!DOCTYPE note SYSTEM boekenwinkel.dtd声明了该文档受boekenwinkel.dtd文件约束SYSTEM表示按给定路径查找 DTD 文件。对应的 DTD 文件内容!ELEMENT boekenwinkel (boek) !ELEMENT boek (titel,prijs) !ATTLIST boek categorie CDATA Literatuur !ELEMENT titel (#PCDATA) !ELEMENT prijs (#PCDATA)逐条拆解这份 DTD 的约束语义声明约束含义!ELEMENT boekenwinkel (boek)根节点boekenwinkel必须包含 1 个或更多boek子节点!ELEMENT boek (titel,prijs)每个boek必须恰好包含titel和prijs两个子节点且逗号表示顺序固定为先titel后prijs!ATTLIST boek categorie CDATA Literatuurboek声明了categorie属性类型为 CDATA纯字符数据若文档省略该属性则取默认值Literatuur文学!ELEMENT titel (#PCDATA)/!ELEMENT prijs (#PCDATA)这两个元素只能包含解析后的字符数据parsed character data即纯文本不能再嵌套子元素内部 DTD在文档内联声明教程接着演示了另一种等价方式把 DTD 直接内联在 XML 文件的!DOCTYPE声明中internal subset无需外部.dtd文件?xml version1.0 encodingUTF-8? !DOCTYPE note [ !ELEMENT boekenwinkel (boek) !ELEMENT boek (titel,prijs) !ATTLIST boek categorie CDATA Literatuur !ELEMENT titel (#PCDATA) !ELEMENT prijs (#PCDATA) ] boekenwinkel boek categorieKOKEN titelAlledaags Italiaans/titel prijs30.00/prijs /boek /boekenwinkel注意!DOCTYPE ... [ ... ]中[]包裹的就是内部子集。内联方式的优点是单文件自包含、便于分发外部文件方式的优点是多份文档可共享同一份 DTD约束集中维护。DTD 的局限与 XML SchemaXSD荷兰语教程聚焦 DTD英文原版 xml.md 在其DTD Compatibility and XML Schema Definitions一节补充了版本演进背景DTD 因为历史悠久工具支持几乎无处不在但 DTD 无法支持命名空间namespaces等现代 XML 特性。XML Schema DefinitionsXSD正是为了替代 DTD、以更强的表达能力定义 XML 文档文法而设计的。从仓库源码结构看这个仓库本身并不解析这些 XML 示例它们纯粹作为教学素材存在但在实际工程中若文档需要命名空间、数据类型约束数值、日期等或更复杂的模型应选用 XSD 而非 DTD。教程文档本身frontmatter 与贡献者元数据从仓库维护的角度nl/xml.md也展示了 Learn X in Y minutes 仓库的文档规范--- contributors: - [João Farias, https://github.com/JoaoGFarias] translators: - [Frank van Gemeren, https://github.com/frvge] ---正文作者是原始教程的 João Fariastranslators字段记录荷兰语译者 Frank van Gemeren这是 CONTRIBUTING.md 要求翻译文章必须包含的字段仓库通过 lint/frontmatter.py 对全部教程文件做自动化校验脚本用正则^(---\s*\n.*?\n)---\n提取 frontmatter再用 yamllint 检查 YAML 语法、按白名单校验键名与值的类型如translators必须是[姓名, URL]形式的列表。可以推断任何翻译文章若 frontmatter 字段缺失或类型错误都会在 CI 中暴露出来仓库还配有 lint/encoding.sh 检查文件编码与 CONTRIBUTING.md 中Use UTF-8的风格准则呼应——这也与教程中?xml version1.0 encodingUTF-8?声明 UTF-8 编码的实践一致。小结从语法到校验的三层判定回到本文的主题nl/xml.md传授的完整知识链条是书写层XML 用成对标签构成树属性承载元数据、元素承载数据声明、注释、空元素等构成完整语法良构层严格解析器要求标签配对、根唯一、大小写一致原文title/titel不匹配的例子正是反面教材校验层用外部或内联 DTD 声明元素结构boek、子元素顺序titel,prijs、属性默认值categorie默认Literatuur与 PCDATA 叶子节点把文档约束从应用逻辑中剥离若需要命名空间与现代类型系统则升级到 XSD。这套示例先行、注释即讲解的写法也正是 Learn X in Y minutes 仓库见 README.md对全部速成教程的统一要求代码示例优先于文字阐述篇幅可扫读、可复用。赞分享文档教程【免费下载链接】learnxinyminutes-docsCode documentation written as code! How novel and totally my idea!项目地址https://gitcode.com/gh_mirrors/le/learnxinyminutes-docs点击查看免费下载相关推荐深入浅出 XML语法基础与 DTD 校验实战指南基于 learnxinyminutes-docs 印尼语教程深入浅出 XML语法基础与 DTD 校验实战指南基于 learnxinyminutes docs 印尼语教程 XMLExtensible Markup文档教程learnxinyminutes-docs 荷兰语 Markdown 教程详解Markdown 语法全景与文档工程实践learnxinyminutes docs 荷兰语 Markdown 教程详解Markdown 语法全景与文档工程实践 本文以 nl/markdown.md文档教程learnxinyminutes-docs 之 XML 速学指南从语法、树结构到 DTD 校验learnxinyminutes docs 之 XML 速学指南从语法、树结构到 DTD 校验 XMLeXtensible Markup Language文档教程上一篇ScanTailor Advanced完整指南让扫描文档处理变得简单快速下一篇Preboot 2.0 终极指南从 Bootstrap 前身到现代化 CSS 开发利器创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考