隨筆 - 14, 文章 - 0, 評論 - 15, 引用 - 0
          數(shù)據(jù)加載中……

          學(xué)習(xí)java&XML第二天,命名空間

                關(guān)于XML的基礎(chǔ)知識一直都是讀的http://www1.xml.net.cn/那本初學(xué)進階,講的非常容易懂,就是關(guān)于命名空間這一塊沒有給出一個比較好的例子,所以自己整理了一下。
                初學(xué)進階里面說命名空間是用于在一個XML里面引入多個DTD的,的確,概念上是這樣子的,不過網(wǎng)上的資料顯示XML的命名空間并不支持DTD格式的格式定義,也就是說,想實現(xiàn)一個XML當(dāng)中有多個文檔格式的話,就必須要使用Schema。
                先了解一下我們要實現(xiàn)的例子:
                
          client.xml
          <聯(lián)系人列表>
            
          <聯(lián)系人>
              
          <姓名>張三</姓名>
              
          <ID>001</ID>
              
          <公司>A公司</公司>
              
          <EMAIL>zhang@aaa.com</EMAIL>
              
          <電話>(010)62345678</電話>
              
          <地址>
                
          <街道>五街1234號</街道>
                
          <城市>北京市</城市>
                
          <省份>北京</省份>
              
          </地址>
              
          <直接上司>
                
          <姓名>王五</姓名>
                
          <電話>
                  
          <秘書電話>(010)62345678</秘書電話>
                  
          <手機>13601234567</手機>
                
          </電話>
              
          </直接上司>
            
          </聯(lián)系人>
          </聯(lián)系人列表>

                以上是我們想要最終表達的數(shù)據(jù)格式,其中,聯(lián)系人的直接上司屬性有點麻煩,因為整個直接上司表達的是一個“企業(yè)經(jīng)理”的“對象”,該“對象”可以以另外的XML形式體現(xiàn),如下:

          <?xml version="1.0" encoding="GB2312"?>
          <企業(yè)經(jīng)理>
            
          <姓名>王五</姓名>
            
          <電話>
              
          <秘書電話>(010)62345678</秘書電話>
              
          <手機>13601234567</手機>
            
          </電話>
          </企業(yè)經(jīng)理>

                看以上的兩個文檔,實際上就是我們想表達的數(shù)據(jù),兩個抽象的實體“聯(lián)系人”和“企業(yè)經(jīng)理”之間存在著一對一的關(guān)系。
                但是我們現(xiàn)在有個麻煩,在聯(lián)系人列表這個XML當(dāng)中,有兩個“姓名”元素和兩個“電話”元素,他們表達的是不同的意思,其文檔格式定義也不同。他們分別對應(yīng)著不同的DTD或者是Schema。
                為了解決這一問題,就有了命名空間的概念,首先,對于我們要最終作用于其上的client.xml,他必須首先區(qū)別聯(lián)系人和企業(yè)經(jīng)理,做法就是在前面加前綴,比如聯(lián)系人的名字改為“聯(lián)系人:名字”而企業(yè)經(jīng)理的名字則改為“企業(yè)經(jīng)理:名字”
                其次,兩個不同的文檔定義文件必須首先定義好命名空間,在作用于XML文件的時候,使命名空間和XML聲明中的命名空間一致
                下面分別給出例子代碼:
                client.xml:
          <?xml version="1.0" encoding="GB2312"?>
          <聯(lián)系人:聯(lián)系人列表 
          xmlns:聯(lián)系人
          ="id" 
          xmlns:xsi
          ="http://www.w3.org/2001/XMLSchema-instance" 
          xsi:schemaLocation
          ="id client.xsd id2 manager.xsd"
          xmlns:企業(yè)經(jīng)理
          ="id2">
              
          <聯(lián)系人:聯(lián)系人>
                  
          <聯(lián)系人:姓名>張三</聯(lián)系人:姓名>
                  
          <聯(lián)系人:ID>001</聯(lián)系人:ID>
                  
          <聯(lián)系人:公司>A公司</聯(lián)系人:公司>
                  
          <聯(lián)系人:EMAIL>zhang@聯(lián)系人.com</聯(lián)系人:EMAIL>
                  
          <聯(lián)系人:電話>(010)62345678</聯(lián)系人:電話>
                  
          <聯(lián)系人:地址>
                      
          <聯(lián)系人:街道>五街1234號</聯(lián)系人:街道>
                      
          <聯(lián)系人:城市>北京市</聯(lián)系人:城市>
                      
          <聯(lián)系人:省份>北京</聯(lián)系人:省份>
                  
          </聯(lián)系人:地址>
                  
          <聯(lián)系人:直接上司>
                      
          <企業(yè)經(jīng)理:姓名>王五</企業(yè)經(jīng)理:姓名>
                      
          <企業(yè)經(jīng)理:電話>
                        
          <企業(yè)經(jīng)理:秘書電話>(010)62345678</企業(yè)經(jīng)理:秘書電話>
                        
          <企業(yè)經(jīng)理:手機>13601234567</企業(yè)經(jīng)理:手機>
                      
          </企業(yè)經(jīng)理:電話>
                  
          </聯(lián)系人:直接上司>
              
          </聯(lián)系人:聯(lián)系人>
              
          <聯(lián)系人:聯(lián)系人>
                  
          <聯(lián)系人:姓名>李四</聯(lián)系人:姓名>
                  
          <聯(lián)系人:ID>002</聯(lián)系人:ID>
                  
          <聯(lián)系人:公司>B公司</聯(lián)系人:公司>
                  
          <聯(lián)系人:EMAIL>li@bbb.org</聯(lián)系人:EMAIL>
                  
          <聯(lián)系人:電話>(021)87654321</聯(lián)系人:電話>
                  
          <聯(lián)系人:地址>
                      
          <聯(lián)系人:街道>南京路9876號</聯(lián)系人:街道>
                      
          <聯(lián)系人:城市>上海市</聯(lián)系人:城市>
                      
          <聯(lián)系人:省份>上海</聯(lián)系人:省份>
                  
          </聯(lián)系人:地址>
                  
          <聯(lián)系人:直接上司>aa</聯(lián)系人:直接上司>
              
          </聯(lián)系人:聯(lián)系人>
          </聯(lián)系人:聯(lián)系人列表>

                client.xsd:
          <?xml version="1.0" encoding="GB2312" standalone="yes"?>
          <!--W3C Schema generated by XMLSpy v2005 sp1 U (http://www.xmlspy.com)-->
          <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="id" targetNamespace="id" elementFormDefault="qualified">
              
          <xs:element name="EMAIL" type="xs:string"/>
              
          <xs:element name="ID" type="xs:string"/>
              
          <xs:element name="公司" type="xs:string"/>
              
          <xs:element name="地址">
                  
          <xs:complexType>
                      
          <xs:sequence>
                          
          <xs:element ref="街道"/>
                          
          <xs:element ref="城市"/>
                          
          <xs:element ref="省份"/>
                      
          </xs:sequence>
                  
          </xs:complexType>
              
          </xs:element>
              
          <xs:element name="城市" type="xs:string"/>
              
          <xs:element name="姓名" type="xs:string"/>
              
          <xs:element name="電話" type="xs:string"/>
              
          <xs:element name="省份" type="xs:string"/>
              
          <xs:element name="聯(lián)系人">
                  
          <xs:complexType>
                      
          <xs:sequence>
                          
          <xs:element ref="姓名"/>
                          
          <xs:element ref="ID"/>
                          
          <xs:element ref="公司"/>
                          
          <xs:element ref="EMAIL"/>
                          
          <xs:element ref="電話"/>
                          
          <xs:element ref="地址"/>
                          
          <xs:element ref="直接上司"/>
                      
          </xs:sequence>
                  
          </xs:complexType>
              
          </xs:element>
              
          <xs:element name="聯(lián)系人列表">
                  
          <xs:complexType>
                      
          <xs:sequence>
                          
          <xs:element ref="聯(lián)系人" maxOccurs="unbounded"/>
                      
          </xs:sequence>
                  
          </xs:complexType>
              
          </xs:element>
              
          <xs:element name="街道" type="xs:string"/>
              
          <xs:element name="直接上司" type="xs:anyType"/>
          </xs:schema>

                manager.xsd:
          <?xml version="1.0" encoding="GB2312" standalone="yes"?>
          <!--W3C Schema generated by XMLSpy v2005 sp1 U (http://www.xmlspy.com)-->
          <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="id2" targetNamespace="id2" elementFormDefault="qualified">
              
          <xs:element name="企業(yè)經(jīng)理">
                  
          <xs:complexType>
                      
          <xs:sequence>
                          
          <xs:element ref="姓名"/>
                          
          <xs:element ref="電話"/>
                      
          </xs:sequence>
                  
          </xs:complexType>
              
          </xs:element>
              
          <xs:element name="姓名" type="xs:string"/>
              
          <xs:element name="手機" type="xs:string"/>
              
          <xs:element name="電話">
                  
          <xs:complexType>
                      
          <xs:sequence>
                          
          <xs:element ref="秘書電話"/>
                          
          <xs:element ref="手機"/>
                      
          </xs:sequence>
                  
          </xs:complexType>
              
          </xs:element>
              
          <xs:element name="秘書電話" type="xs:string"/>
          </xs:schema>

          說明:我在這里用id和id2來表示命名空間是應(yīng)為很多人會認為那個命名空間的網(wǎng)址會在解析XML的時候被訪問,我一開始也這樣認為,所以改成id來做個測試。

          posted on 2005-03-08 17:32 Boris-Java 閱讀(1023) 評論(0)  編輯  收藏 所屬分類: java&xml

          主站蜘蛛池模板: 淮北市| 巴林左旗| 襄城县| 平陆县| 祁连县| 贞丰县| 蒙阴县| 金堂县| 德令哈市| 灵石县| 屏山县| 灵武市| 宝坻区| 林甸县| 逊克县| 吕梁市| 龙胜| 天台县| 延边| 鹤岗市| 米林县| 阳曲县| 桓台县| 钦州市| 邢台县| 垣曲县| 海门市| 岳阳县| 南通市| 武夷山市| 咸丰县| 吴旗县| 大足县| 布拖县| 安乡县| 永德县| 民县| 宣恩县| 芜湖县| 泰来县| 彩票|