/*
xml概述
什么是XML
    XML :可扩展标记语言(EXtensible Markup Language)
     XML 它是一种标记语言,很类似 HTML,HTML文件也是XML文档,标签都是自定义的。 如:<user></user><student></student>
    W3C在1988年2月发布1.0版本,2004年2月又发布1.1版本,单因为1.1版本不能向下兼容1.0版本,所以1.1没有人用。同时,在2004年2月W3C又发布了1.0版本的第三版。我们要学习的还是1.0版本。
XML 与 HTML 的主要差异
    xml标签都是自定义的,html标签是预定义。
    xml的语法严格,html语法松散。
    xml是存储数据的,html是展示数据。
xml的作用
    存放数据
    
    
<?xml version="1.0" encoding="UTF-8"?>
<persons>
    <person id="p001">
        <name>张三</name>
    </person>
    <person id="p002">
        <name>李四</name>
    </person>
</persons>

类似于java代码
class Person{
    String id;
    String name;
}

public void test(){
    HashSet<Person> persons = new HashSet<Person>();
    persons.add( new Person("p001","张三") );
    persons.add( new Person("p002","李四") );
}

•    配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans>
    <bean className="com.itheima_00_Bean.User">
        <property name="username" value="jack"></property>
    </bean>
</beans>
类似于java代码
class Bean{
    private String username;
    private String pws;
    //补全set\get方法
}
import com.itheima_00_Bean.User;
public static void main(){
    Class clzzz = Class.forName("com.itheima_00_Bean.User");
    Object obj = clazz.newInstance();
    Method method = clazz.getMethod("setUsername",String.class);
    method.invoke(obj,"jack");
}

xml的组成元素
文档声明
    XML文档声明格式:
<?xml version="1.0" encoding="UTF-8"?>
    1.    文档声明必须为结束;
    2.    文档声明必须从文档的0行0列位置开始;
    3.    文档声明只有2个属性:
        1. versioin:指定XML文档版本。必须属性,因为我们不会选择1.1,只会选择1.0;
        2. encoding:指定当前文档的编码。可选属性,默认值是utf-8;

元素
元素 element
<bean></bean>
    1.    元素是XML文档中最重要的组成部分,
    2.    普通元素的结构开始标签、元素体、结束标签组成。例如:大家好
    3.    元素体:元素体可以是元素,也可以是文本,例如:你好
    4.    空元素:空元素只有开始标签,而没有结束标签,但元素必须自己闭合,例如:
    5.    元素命名:
        1. 区分大小写
        2. 不能使用空格,不能使用冒号:
        3. 不建议以XML、xml、Xml开头
格式化良好的XML文档,必须只有一个根元素。
属性
属性 attribute
<beanid="" className="">
    1.    属性是元素的一部分,它必须出现在元素的开始标签中
    2.    属性的定义格式:属性名=属性值,其中属性值必须使用单引或双引
    3.    一个元素可以有0~N个属性,但一个元素中不能出现同名属性
    4.    属性名不能使用空格、冒号等特殊字符,且必须以字母开头

5.2.4 注释
XML的注释,以“<!--”开始 以“-->”结束。注释内容会被XML解析器忽略!

5.2.5 转义字符
因为很多符号已经被XML文档结构所使用,所以在元素体或属性值中想使用这些符号就必须使用转义字符,例如:“<”、“>”、“’”、“””、“&”。
*/
public class day01 {

}

因为很多符号已经被XML文档结构所使用,所以在元素体或属性值中想使用这些符号就必须使用转义字符,例如

 

 

 

/*
xml约束
在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。 常见的xml约束:DTD、Schema
DTA约束
什么是DTD? 
DTD(Document Type Definition),文档类型定义,用来约束XML文档。规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等。

DTD重点要求
开发中,我们很少自己编写DTD约束文档,通常情况我们都是通过框架提供的DTD约束文档,编写对应的XML文档。常见框架使用DTD约束有:struts2、hibernate等。
通过提供的DTD“bean.dtd”编写XML
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT beans (bean*,import*) >
<!ELEMENT bean (property*)>
<!ELEMENT property (#PCDATA)>

<!ELEMENT import (#PCDATA)>

<!ATTLIST bean id CDATA #REQUIRED
               className CDATA #REQUIRED
>

<!ATTLIST property name CDATA #REQUIRED
                   value CDATA #REQUIRED
>

<!ATTLIST import resource CDATA #REQUIRED>


 */
public class day01 {

}

 web-app_2_3.dtd

<?xml version="1.0" encoding="UTF-8"?>
<!--
    
    模拟servlet2.3规范,如果开发人员需要在xml使用当前DTD约束,必须包括DOCTYPE。
    格式如下:
    <!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
-->
<!ELEMENT web-app (servlet*,servlet-mapping* , welcome-file-list?) >
<!ELEMENT servlet (servlet-name,description?,(servlet-class|jsp-file))>
<!ELEMENT servlet-mapping (servlet-name,url-pattern+) >
<!ELEMENT servlet-name (#PCDATA)>
<!ELEMENT servlet-class (#PCDATA)>
<!ELEMENT url-pattern (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT jsp-file (#PCDATA)>

<!ELEMENT welcome-file-list (welcome-file+)>
<!ELEMENT welcome-file (#PCDATA)>

<!ATTLIST web-app version CDATA #IMPLIED>

怼到*.xml目录下 写起xml就有提示了

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
<web-app version="1.0">
    <servlet>
        <servlet-name></servlet-name>
        <servlet-class></servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name></servlet-name>
        <url-pattern></url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file></welcome-file>
    </welcome-file-list>
</web-app>
Schema约束
什么是Schema?

Schema是新的XML文档约束; Schema要比DTD强大很多,是DTD 替代者; Schema本身也是XML文档,但Schema文档的扩展名为xsd,而不是xml。 Schema 功能更强大,数据类型更完善 Schema 支持名称空间

Schema重点要求

与DTD一样,要求可以通过schema约束文档编写xml文档。

web-app_2_5.xsd

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
    
    模拟servlet2.5规范,如果开发人员需要在xml使用当前Schema约束,必须包括指定命名空间。
    格式如下:
    <web-app xmlns="http://www.example.org/web-app_2_5" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
            version="2.5">
-->
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/web-app_2_5"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:tns="http://www.example.org/web-app_2_5" 
    elementFormDefault="qualified">
    
    <xsd:element name="web-app">
        <xsd:complexType>
            <xsd:choice minOccurs="0" maxOccurs="unbounded">
                <xsd:element name="servlet">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="servlet-name"></xsd:element>
                            <xsd:element name="servlet-class"></xsd:element>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="servlet-mapping">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="servlet-name"></xsd:element>
                            <xsd:element name="url-pattern" maxOccurs="unbounded"></xsd:element>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="welcome-file-list">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="welcome-file" maxOccurs="unbounded"></xsd:element>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:choice>
            <xsd:attribute name="version" type="double" use="optional"></xsd:attribute>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>
web.xml


<?
xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://www.example.org/web-app_2_5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd" version="2.5"> <servlet> <servlet-name>helloServlet</servlet-name> <servlet-class>xxxxxxxxxx</servlet-class> </servlet> <servlet-mapping> <servlet-name>helloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
什么是命名空间

如果一个XML文档中使用多个Schema文件,而这些Schema文件中定义了相同名称的元素时就会出现名字冲突。这就像一个Java文件中使用了import java.util.和import java.sql.时,在使用Date类时,那么就不明确Date是哪个包下的Date了。

总之名称空间就是用来处理元素和属性的名称冲突问题,与Java中的包是同一用途。如果每个元素和属性都有自己的名称空间,那么就不会出现名字冲突问题,就像是每个类都有自己所在的包一样,那么类名就不会出现冲突。

约束文档和xml关系

当W3C提出Schema约束规范时,就提供“官方约束文档”。我们通过官方文档,必须“自定义schema 约束文档”,开发中“自定义文档”由框架编写者提供。我们提供“自定义文档”限定,编写出自己的xml文档。

 

 

声明命名空间

默认命名空间:<xxx xmlns=””>,使用<标签>
显式命名空间:<xxx xmlns:别名=””>,使用<别名:标签>

 

posted on 2021-02-04 14:58  王平  阅读(69)  评论(0)    收藏  举报