天天看點

JavaScript 中 xml 限制

目錄

​​1、dtd 限制​​

​​【1】編寫步驟​​

​​【2】xml 檔案引入 dtd 檔案方法​​

​​【3】dtd 元素定義​​

​​【4】dtd 屬性定義​​

​​【5】dtd 定義實體​​

​​2、schema 限制​​

​​【1】屬性​​

​​【2】特點​​

​​【3】編寫步驟​​

​​【4】複雜元素訓示器​​

​​【5】限制屬性​​

1、dtd 限制

【1】編寫步驟

  1. 看 xml 中有多少個元素,有幾個就在 dtd 檔案中寫幾個 <!ELEMENT>
  2. 判斷元素是簡單元素還是複雜元素
    1. 簡單元素:沒有子元素   

      <!ELEMENT  元素名稱  (#PCDATA)>

    2. 複雜元素:有子元素的元素   

      <!ELEMENT  元素名稱  (子元素)>

  3. 需要在 xml 檔案中引入 dtd 檔案

    <!DOCTYPE  根元素名稱  SYSTEM  "dtd檔案的路徑">

【2】xml 檔案引入 dtd 檔案方法

  1. 内部引入

    <!DOCTYPE students [

            <!ELEMENT students (student*)>

            <!ELEMENT student (name,age,sex)>

            <!ELEMENT name (#PCDATA)>

            <!ELEMENT age (#PCDATA)>

            <!ELEMENT sex (#PCDATA)>

            <!ATTLIST student number ID #REQUIRED>

            ]>

  2. 外部引入
    1. 本地:<!DOCTYPE  根元素名稱  SYSTEM  "dtd檔案路徑">
    2. 網絡:<!DOCTYPE  根元素名稱  PUBLIC  "dtd名稱"  "dtd檔案的URL">
  • 内部引入:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students [
        <!ELEMENT students (student*)>
        <!ELEMENT student (name,age,sex)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT age (#PCDATA)>
        <!ELEMENT sex (#PCDATA)>
        <!ATTLIST student number ID #REQUIRED>
        ]>
<students>
    <student number="s001">
        <name></name>
        <age></age>
        <sex></sex>
    </student>
</students>      
  • 外部引入:

xml 檔案

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students SYSTEM "student.dtd">
<students>
    <student number="s001">
        <name></name>
        <age></age>
        <sex></sex>
    </student>
</students>      

dtd 檔案

<!ELEMENT students (student*)>
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>      

【3】dtd 元素定義

  • 文法:<!ELEMENT  元素名  限制>
  • 簡單元素:<!ELEMENT  name  (#PCDATA)>
  • (#PCDATA):限制 name 是字元串類型
  • EMPTY:限制元素為空
  • AND:限制任意元素
  • 複雜元素:<!ELEMENT  student  (name+,age?,sex*)>
  • <!ELEMENT  元素名稱  (子元素)>
  • 表示元素出現的次數:
  • +:表示一次或者多次
  • ?:表示零次或者一次
  • *:表示零次或者多次
  • 子元素直接使用逗号隔開
  • 表示元素出現的順序
  • 子元素直接使用 | 隔開
  • 表示元素隻能出現其中的任意一個

【4】dtd 屬性定義

  • 文法:<!ATTLIST  元素名稱  屬性名稱  屬性類型  屬性的限制>
  • 屬性類型
  • CDATA:字元串
  •  | :枚舉(aa|bb|cc)
  • ID:值隻能是字元串或者下劃線開頭
  • 屬性的限制
  • #REQUIRED:表示屬性必須存在
  • #IMPLIED:表示屬性可有可無
  • #FIXED:表示一個固定值
  • 直接值:直接設定

【5】dtd 定義實體

  • 文法:<!ENTITY  實體名稱  "實體的值">   rg:<!ENTITY  NAME  "一顆星">
  • 使用實體:&NAME;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students [
        <!ELEMENT students (student*)>
        <!ELEMENT student (name,age,sex)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT age (#PCDATA)>
        <!ELEMENT sex (#PCDATA)>
        <!ATTLIST age num (18|19|20) #REQUIRED>
        <!ATTLIST student number ID #REQUIRED>
        <!ENTITY  NAME "一顆星">
        ]>
<students>
    <student number="s001">
        <name>&NAME;</name>
        <age num="18"></age>
        <sex></sex>
    </student>
</students>      

2、schema 限制

【1】屬性

在 schema 檔案裡面開頭有幾個屬性

  • xmlns="http://www.w3.org/2001/XMLSchema"
  • 表示目前xml是一個限制檔案
  • targetNamespace="http://www.oneStar.cn"
  • 使用schema限制檔案,直接通過這個位址引入限制檔案,可以是個随意的位址
  • elementFormDefault="qualified">
  • 表示品質良好

【2】特點

  • schema 是 xml 語句,符合 xml 文法
  • 一個 xml 中可以有多個 schema,多個 schema 使用命名空間來區分
  • dtd 檔案裡面隻有 PCDATA 類型,但 schema 裡面可以支援更多的資料類型
  • schema 文法更加的複雜
  • 以 .xsd 為字尾名

【3】編寫步驟

  • 看 xml 中有多少個元素,有多少個元素就寫多少個 <element>
  • 看是簡單元素還是複雜元素
    • 複雜元素:

      <complexType>

          <sequence>

              子元素

          </sequence>

      </complexType>

    • 簡單元素:寫在複雜元素<sequence>裡面

      <sequence>

              <element name="name" type="string"></element>

      </sequence>

  • 在 xml 中引入 xsd 檔案
    • <person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      • 表示該檔案時被限制檔案
    • xmlns="http://www.oneStar.cn"
      • 是限制檔案裡面的 targetNamespace
    • xsi:schemaLocation="http://www.oneStar.cn person.xsd">
      • targetNamespace + 空格 + 限制文檔的位址路徑
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.oneStar.cn"
        elementFormDefault="qualified">
    <element name="person">
        <complexType>
            <sequence>
                <element name="name" type="string"></element>
                <element name="age" type="int"></element>
            </sequence>
        </complexType>
    </element>
</schema>      
<?xml version="1.0" encoding="UTF-8"?>
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.oneStar.cn"
        xsi:schemaLocation="http://www.oneStar.cn person.xsd">
    <name>一顆星</name>
    <age>18</age>
</person>      

【4】複雜元素訓示器

  • <sequence>:表示元素的出現順序
  • <all>:表示元素隻能出現一次
  • <choice>:表示元素隻能出現其中一個
  • <maxOccurs="unbounded">:表示元素出現的次數,unbounded表示不限制次數
  • <any></any>:表示任意元素

【5】限制屬性

  • 位置:寫在複雜元素裡面的 </complexType> 之前 <attribute name="id1" type="int" use="required"></attribute>
  • name:屬性名稱
  • type:屬性類型  int   string
  • use:屬性是否必須出現   required

繼續閱讀