【C# 序列化】 XML 构建模块 XML shcema


内容来源:https://www.runoob.com/xml/xml-dtd.html
                https://www.runoob.com/dtd/dtd-building.html

XML 简介

XML 被设计用来结构化存储以及传输信息。XML 是独立于软件和硬件的信息传输工具。
HTML 中使用的标签都是预定义的。HTML 文档只能使用在 HTML 标准中定义过的标签(如

等等)。
XML 允许创作者定义自己的标签和自己的文档结构。

什么是 XML?

    XML 指可扩展标记语言(EXtensible Markup Language)。
    XML 是一种很像HTML的标记语言。
    XML 的设计宗旨是传输数据,而不是显示数据。
    XML 标签没有被预定义。您需要自行定义标签。
    XML 被设计为具有自我描述性。
    XML 是 W3C 的推荐标准。

通过 XML 您可以发明自己的标签

上面实例中的标签没有在任何 XML 标准中定义过(比如 )。这些标签是由 XML 文档的创作者发明的。

这是因为 XML 语言没有预定义的标签。

HTML 中使用的标签都是预定义的。HTML 文档只能使用在 HTML 标准中定义过的标签(如

等等)。

XML 允许创作者定义自己的标签和自己的文档结构。

一个 良好的 XML 文档实例

XML 文档使用简单的具有自我描述性的语法:

<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Toveto>
<from>Janifrom>
<heading>Reminderheading>
<body>Don't forget me this weekend!body>
note>

第一行是 XML 声明。它定义 XML 的版本(1.0)和所使用的编码(UTF-8 : 万国码, 可显示各种语言)。

下一行描述文档的根元素(像在说:"本文档是一个便签"):

接下来 4 行描述根的 4 个子元素(to, from, heading 以及 body):

<to>Toveto> <from>Janifrom> <heading>Reminderheading> <body>Don't forget me this weekend!body>

最后一行定义根元素的结尾:


XML 文档形成一种树结构

XML 文档必须包含根元素。该元素是所有其他元素的父元素。

XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。

"合法"的 XML文档

通过 DTD 验证的XML是"合法"的 XML。DTD 的目的是定义 XML 文档的结构。它使用一系列合法的元素来定义文档结构。叫做合法的xml文档

良好的 XML 文档

我们把符合 XML 语法的文档称为形式良好的 XML 文档,比如:

  • 它必须以 XML 声明开头
  • 它必须拥有唯一的根元素
  • 开始标签必须与结束标签相匹配
  • 元素对大小写敏感
  • 所有的元素都必须关闭
  • 所有的元素都必须正确地嵌套
  • 必须对特殊字符使用实体
 

 XML类型

根据xml 框架(约束规范)不同形成不同xml:

     DTD框架:   文档类型定义(DTD)的规则,DTD 的目的是定义 XML 文档的结构。它使用一系列合法的元素来定义文档结构:

     Schema框架:XML Schema 是基于 XML 的 DTD 替代者。XML Schema 可描述 XML 文档的结构。XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD。

XML 文档的构成:

  • xml文档声明(可选):<?xml version="1.0"?>声明这是一个xml文档
  • 验证 XML 文档(可选):通过 DTD 验证的XML是"合法"的 XML。xml验证方式有两种XML Schema(新)和XML DTD(旧)两种方式
  • 元素(可以自定义):<title>Harry Pottertitle> XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。
    一个元素可以包含:其他元素\ 文本\属性\或混合以上所有...XML 命名规则
  • 属性:computer.gif属性值必须被引号包围,不过单引号和双引号均可使用。比如一个人的性别,person 元素可以这样写:

    如果属性值本身包含双引号,您可以使用单引号,就像这个实例:

    或者您可以使用字符实体:

  • 实体(可选)用来声明一个 xml 变量。如声明一个实体&writer;//应用实体 ©right;。实体相当与变量。
    • 具体内容在请阅读下面【 实体】的部分
  • PCDATA(parsed character data )(可选):PCDATA 是会被解析器解析的文本(可以被xml解析的字符窜),解析器会检查这些文本中的实体以及标记 。#PCDATA 解析器将检查这些文本中的实体、标记
    • ELEMENT to (#PCDATA)>
      <to> 在范围你出现>, <, &, ', "这5个特殊字符 都有其他意义,因此必须被转化成实体,还可以包含其他xml标签to>
  • CDATA(character data)(可选):CDATA 是不会被解析器解析的文本(字符串)。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。用来告诉xml解析器(eg.浏览器),这部分内容不用解析,是给其他程序用的,比如js代码等。
    •   
              if(i<10){ 
                System.out.println("i<10"); 
              } 
      在范围你出现>, <, &, ', "这5个特殊字符 都没有特殊意义。就是普通的字符
      ]]>
  • 注释(可选)
  • 使用 CSS 显示 XML(可选) :

     

 

XML  DTD

内如来自:https://www.runoob.com/dtd/dtd-entities.html

最大的作用是为了验证xml文件的规范性的.文件的后缀名为*.DTD

内部的 DOCTYPE 声明

假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中:

带有 DTD 的 XML 文档实例(请在 IE5 以及更高的版本打开,并选择查看源代码):

<?xml version="1.0"?>
DOCTYPE note [
from,heading,body)>

from (#PCDATA)>


]>

Tove
<from>Janifrom>
Reminder
Don't forget me this weekend
 

以上 DTD 解释如下:

  • <?xml version="1.0"?> 
  • !DOCTYPE note (第二行)定义此文档是 note 类型的文档。
  • !ELEMENT note (第三行)定义 note 元素有四个元素:"to、from、heading,、body"
  • !ELEMENT to (第四行)定义 to 元素为 "#PCDATA" 类型
  • !ELEMENT from (第五行)定义 from 元素为 "#PCDATA" 类型
  • !ELEMENT heading (第六行)定义 heading 元素为 "#PCDATA" 类型
  • !ELEMENT body (第七行)定义 body 元素为 "#PCDATA" 类型

 实体:

语法

//xml文档内部 //xml文档外部
实体就是用来声明一个xml变量的:writer "Donald Duck.">
实体引用字符就是变量的引用如:&writer;//&表示取地址 &writer取变量writer的地址 ;表示结束
//xml文档内部 DTD 实例:

"Donald Duck.">  //定义一个xml变量 writer(就是定义一个变量writer),这个变量的使用方式【&变量名;】
"Copyright runoob.com">

XML 实例:

&writer;//应用writer变量  ©right; 

//xml文档外部 实例:


XML example: &writer;©right;

 CDATA

CDATA 部分由 "" 结束:

为什么使用 DTD?

通过 DTD,您的每一个 XML 文件均可携带一个有关其自身格式的描述。

通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。

而您的应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。

您还可以使用 DTD 来验证您自身的数据。

XML  shcema

XML  shcema文档也是xml文档,与 DTD 不同,XML Schema 支持数据类型(data type)和命名空间(namespace)。

 schema约束同为xml文件的约束模式语言之一, 最大的作用是为了验证xml文件的规范性的.
  是为了解决dtd约束不够的问题, 相应的他的配置就变得比较复杂
  schema本身就是xml语言, 后缀名为xsd, 对命名空间的支持非常好
  schema的根元素就为schema

内如来自:https://www.w3school.com.cn/schema/schema_facets.asp

此 XML 文档含有对 XML Schema 的引用:

<?xml version="1.0"?>

<note xmlns="http://www.runoob.com" //默认的命名空间,所有不用映射任何常量上
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xmlns:命名空间常量=“URI” //需要将命名空间 映射到xsi常量上,当标签来自xsi命名空间时,这个标签前要添加命名空间xsi,防止和默认命名空间标签冲突 如:>sfsdf<:xsi:time>
xsi:schemaLocation="http://www.runoob.com note.xsd">   命名空间常量:所在位置=“命名空间URI 具体约束文件的位置”>

<to>Toveto>
<from>Janifrom>
<heading>Reminderheading>
<body>Don't forget me this weekend!body>
>sfsdf<:xsi:time>
note> 

 格式


schema约束和dtd约束的区别:

  ⑴XML Schema符合XML语法结构。
  ⑵DOM、SAX等XML API很容易解析出XML Schema文档中的内容。
  ⑶XML Schema对名称空间支持得非常好。
  ⑷XML Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。
  ⑸XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。
  ⑹XML Schema不能像DTD一样定义实体,比DTD更复杂,但Xml Schema现在已是w3c组织的标准,它正逐步取代D

XAML名称空间

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Button Content="Button" HorizontalAlignment="Left" Margin="437,104,0,0" VerticalAlignment="Top" Height="72" Width="125" Click="Button_Click"/>
        <Button Name="btn2" Content="Button" HorizontalAlignment="Left" Margin="107,187,0,0" VerticalAlignment="Top" Height="64" Width="154" Click="Button_Click_1" AutomationProperties.Name="btn2"/>
        <TextBox Name="tb" HorizontalAlignment="Left" Margin="400,302,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="324" Height="103"/>

    Grid>
 <D
>

  XAML解析器需要知道类位于哪个.NET名称空间。例如,在许多名称空间中可能都有Window类——Windowm类可能是指System.Windows.Window类,也可能是指位于第三方组件中的Window类。为了弄清实际上希望使用哪个类,XAML解析器会检查应用于元素的XML名称空间。

   上面显示的示例文档定义了两个名称空间:
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  xmlns特性是XML中的一个特殊特性,它专门用来声明名称空间,这段标记声明了两个名称空间,在创建的所有WPF XAML文档中都会使用这两个名称空间:
    http://schemas.microsoft.com/winfx/2006/xaml/presentation是WPF核心名称空间。它包含了所有WPF类,包括用来构建用户界面的控件。在该例中,该名称空间的声明没有使用名称空间前缀,所以它成为整个文档的默认名称空间。换句话说,除非另外指明,每个元素自动位于这个名称空间。
    http://schemas.microsoft.com/winfx/2006/xaml 是XAML名称空间。它包含各种XAML使用特性,这些特性可影响文档的解释方式。该名称空间被映射为前缀x。这意味着可通过在元素名称之前放置名称空间前缀x来使用该名称空间
-----------------------------------
【WPF学习】第一章 XAML介绍
https://blog.51cto.com/u_15127581/2779818

C