XML-2の概要

1つは、XMLセマンティック制約です。

1. XMLドキュメントの構造は正しいですが、有効でない可能性があります

たとえば、「植物品種」タグは、従業員ファイルxmlでは許可されません。xmlセマンティック制約は、xmlドキュメントに表示できる要素を指定するために使用されます

2. XMLセマンティック制約を定義するには、 DTDとXMLスキーマの2つの方法があります。

2、DTD

1.定義:DTD(Document Type Definition)は、シンプルで使いやすいセマンティック制約メソッドです。

2、DTDファイル名拡張子は.dtdです

3. DTDの<!ELEMENT>タグを使用して、XMLドキュメントで許可されるノードの数と数を定義できます。例としてhr.xmlを取り上げます。

  • hrノードの下で許可される従業員の子ノードは1つだけであることを定義します。
<!ELEMENT hr(employee)>
  • 従業員ノードには、次の4つのノードが含まれている必要があり、それらは順番に表示されます。
<!ELEMENT employee(name,age,salary,department)>
  • 名前タグの本文はテキストのみにすることができます。#PCDATAはテキスト要素を表します。
<!ELEMENT name (#PCDATA)>

子ノードを複数回繰り返す必要がある場合は、子ノードの後に​​応答記述子を追加する必要があります

  • 少なくとも1つの従業員の子ノードがhrノードの下に表示されます
<!ELEMENT hr(employee+)>
  • 0 ... n従業員の子ノードはhrノードの下に表示できます
<!ELEMENT hr(employee*)>
  • 最大で1つの従業員の子ノードがhrノードの下に表示されます
<!ELEMENT hr(employee?)>

4. XMLで<!DOCTYPE>タグを使用して、DTDファイルを参照します

書き方:

<!DOCTYPE 根节点 SYSTEM "dtd文件路径">

例:

<!DOCTYPE hr SYSTEM "hr.dtd">

最後のデモ

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hr SYSTEM "hr.dtd">

<hr>
    <employee no="3309">
        <name>kola</name>
        <age>13</age>
        <salary>2333</salary>
        <department>
            <dname>it</dname>
            <address>xx大厦</address>
        </department>
    </employee>
    <employee no="3319">
        <name>lily</name>
        <age>13</age>
        <salary>3211</salary>
        <department>
            <dname>it</dname>
            <address>xx大厦</address>
        </department>
    </employee>
</hr>
<?xml version="1.0" encoding="UTF-8"?>
        <!ELEMENT hr (employee+)>
        <!ELEMENT employee (name,age,salary,department)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT age (#PCDATA)>
        <!ELEMENT salary (#PCDATA)>
        <!ELEMENT department (dname,address)>
        <!ELEMENT dname (#PCDATA)>
        <!ELEMENT address (#PCDATA)>
        <!ATTLIST employee no "CDATA" "">

親タグで子タグの数を指定する場合、親タグとそれに続く括弧の間に「スペース」が必要であることに注意しください

//属性を定義するときの制約形式

<!ATTLISTノード名属性名CDATA ""> //デフォルト値は引用符で囲まれています

3、スキーマの制約

  1. XMLスキーマはDTDよりも複雑で、より多くの機能を提供します。
  2. XMLスキーマは、データ型、形式の制限、データ範囲などの機能を提供します。
  3. XMLスキーマはW3C標準です。
    より複雑なので、コードに移動してコメントを読んでください〜
<?xml version="1.0" encoding="UTF-8"?>
<!--<!DOCTYPE hr SYSTEM "hr.dtd">-->
<!--告诉xml文档约束使用的是schema-->
<hr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="hr.xsd">
    <employee no="3309">
        <name>kola</name>
        <age>13</age>
        <salary>2333</salary>
        <department>
            <dname>it</dname>
            <address>xx大厦</address>
        </department>
    </employee>
    <employee no="3319">
        <name>lily</name>
        <age>13</age>
        <salary>3211</salary>
        <department>
            <dname>it</dname>
            <address>xx大厦</address>
        </department>
    </employee>
</hr>

<?xml version="1.0" encoding="utf-8" ?>
<!--定义schema:idea工具这句话要删掉,否则会报错-->
<!--<schema xmlns="http://www.w3.org/2001/XMLSchema">-->
    <!--声明根节点-->
<schema>
    <element name="hr">
        <!--coplexType标签含义是复杂节点,包含子节点时必须使用这个标签-->
        <complexType>
            <!--sequence表示序列,含义是子节点必须按照前后顺序书写-->
            <sequence>
                <!--约束子节点最多最少出现的次数-->
                <element name="employee" minOccurs="1" maxOccurs="999">
                    <complexType>
                        <sequence>
                            <element name="name" type="string"></element>
                            <element name="age">
                                <!--限制年龄-->
                                <simpleType>
                                    <restriction base="integer">
                                        <maxExclusive value="60"></maxExclusive>
                                        <minExclusive value="18"></minExclusive>
                                    </restriction>
                                </simpleType>
                            </element>
                            <element name="salary" type="integer"></element>
                            <element name="department">
                                <complexType>
                                    <sequence>
                                        <element name="dname" type="string"></element>
                                        <element name="address" type="string"></element>
                                    </sequence>
                                </complexType>
                            </element>
                        </sequence>
                    </complexType>
                </element>
            </sequence>
            <!--属性设置:定义use表示属性在任何节点必须存在-->
            <attribute name="no" type="string" use="required"></attribute>
        </complexType>
    </element>
</schema>

おすすめ

転載: blog.csdn.net/qq_36792120/article/details/111477302