日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

XML——XML Schema

發布時間:2023/12/3 asp.net 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 XML——XML Schema 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【0】README

0.0)本文文字描述轉自 core java volume 2 , 旨在理解 XML——XML Schema 的基礎知識 ;(本文不涉及源代碼, 很遺憾,以后會補充)


【1】XML Schema 相關

1.0)為什么引入XML Schema? 如果要指定文檔結構,可以提供一個文檔類型定義(DTD)或一個 XML Schema定義;DTD 或 schema 包含了用于解釋文檔應該如何構成的規則, 這些規則指定了每個元素的合法子元素和和屬性; (干貨——為什么引入XML Schema)

1.1)如果要在文檔中引用 Schema 文件, 需要在 根元素中添加屬性, 例如:

<?xml version="1.0"?> <configuration xmlns:xsi="http://www.w2.org/2001.XMLSchema-instance"xsi:noNamespaceSchemaLocation="config.xsd"> </configuration>
  • 這個聲明是在說: Schema文件 config.xsd 會被用來驗證文檔;(而 前綴xsi 是一個命名空間別名——namespace alias); (干貨——前綴xsi 是一個命名空間別名)

1.2)Schema使用命名空間定義了每個元素的類型。類型可以是簡單類型,即有格式限制的字符串或復雜類型。 (干貨——Schema使用命名空間定義了每個元素的類型。)

  • 1.2.1)一些簡單類型已經被內建到了 XML Schema 內,包括:
xsd : string xsd : int xsd : boolean

Attention)

  • A1)我們用前置 xsd: 來表示XSL Schema定義的命名空間, 一些作者用 xs: 代替;
  • A2)可以自定義自己的簡單類型:
<xsd: simpleType name="StyleType"><xsd: restriction base="xsd:string"><xsd: enumeration value="PLAIN"><xsd: enumeration value="BOLD"><xsd: enumeration value="ITALIC"><xsd: enumeration value="BOLD_ITALIC"></xsd: restriction> </xsd: simpleType>
  • A2.1)當定義元素時,要指定它的類型:
<xsd: element name="name" type="xsd:string" /> <xsd: element name="size" type="xsd:int" /> <xsd: element name="style" type="StyleType" />
  • A2.2)類型約束了元素的內容, 下面 的元素個數被驗證為正確格式:
<size>10</size> <style>PLAIN</style>
  • A2.3)但是下面的元素會被解析器拒絕:
<size>default</size> <style>SLANTED</style>
  • A2.4)你可以把類型組合成復雜類型, 如:
<xsd:complexType name="FontType"><xsd:sequence><xsd:element ref="name"/><xsd:element ref="size"/><xsd:element ref="style"/></xsd:sequence> </xsd:complexType>
  • A2.5)嵌套定義:在上面的類型定義中, 我們用ref 屬性來引用在 Schema 中位于別處的定義。也可以嵌套定義, 如這樣:
<xsd:complexType name="FontType"><xsd:sequence> <xsd: element name="name" type="xsd:string" /><xsd: element name="size" type="xsd:int" /><xsd: element name="style" type="StyleType" /><xsd: simpleType> // 而不是<xsd: simpleType name="StyleType">, 請注意這叫匿名定義;<xsd: restriction base="xsd:string"><xsd: enumeration value="PLAIN"><xsd: enumeration value="BOLD"><xsd: enumeration value="ITALIC"><xsd: enumeration value="BOLD_ITALIC"></xsd: restriction></xsd: simpleType></xsd:sequence> </xsd:complexType>
  • A2.6)xsd: choice 和 | 操作符等價, 如: (干貨——xsd:choice 和 | 操作符等價)
<xsd:complexType name="contactinfo"><xsd:choice><xsd:element ref="email"><xsd:element ref="phone"></xsd:choice> </xsd:complexType> 同: <xsd:complexType name="contactinfo"><xsd:element ref="email | phone"> </xsd:complexType>
  • A2.7)如果允許使用重復元素,使用 minoccurs 和 maxoccurs 屬性:

  • A2.7.1)看個荔枝:與 DTD類型 item* 的等價形式如下:
    <xsd:element name="item" type="..." minoccurs="0" maxoccurs="unbounded">

  • A2.7.2)如果要指定屬性, 可以吧 xsd:attribute 元素添加到 complexType定義中去:

<xsd:element name=szie><xsd:complexType>...<xsd:attribute name="unit" type="xsd:string" use = "optional" default="cm"/></xsd:complexType> </xsd:element>
  • A2.8)這是DTD 聲明等價 的形式:
    <!ATTLIST size unit CDATA #IMPLIED "cm">

  • A2.9) 可以把 Schema 的元素和類型定義封裝在 xsd:schema 元素中:

<xsd: schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> ... </xsd: schema>
  • A2.10)解析帶有 Schema 的XML 文件和解析帶有 DTD 的文件相似, 但有3點差別(Difference): (干貨—— Schema 的XML 文件和帶有 DTD 的XML文件的差別有3)

    • D1)必須打開對命名空間的支持,即使在 XML 文件里你不使用它;
      factory.setNamespaceAware(true);
    • D2)必須通過如下 “魔咒”來準備好處理 Schema 的工廠:
      final String JAXP_SCHEMA_LANGUAGE="http://java.sun.com/xml/jaxp/properties/schemaLanguage";
      final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
      factory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA );
    • D3) 解析器不會丟棄元素中的空白字符, 這是個很老火的問題;

總結

以上是生活随笔為你收集整理的XML——XML Schema的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。