隨筆 - 14, 文章 - 0, 評論 - 15, 引用 - 0
          數據加載中……

          學習java&XML第二天,命名空間

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

                以上是我們想要最終表達的數據格式,其中,聯系人的直接上司屬性有點麻煩,因為整個直接上司表達的是一個“企業經理”的“對象”,該“對象”可以以另外的XML形式體現,如下:

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

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

                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="聯系人">
                  
          <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="聯系人列表">
                  
          <xs:complexType>
                      
          <xs:sequence>
                          
          <xs:element ref="聯系人" 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="企業經理">
                  
          <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來表示命名空間是應為很多人會認為那個命名空間的網址會在解析XML的時候被訪問,我一開始也這樣認為,所以改成id來做個測試。

          posted @ 2005-03-08 17:32 Boris-Java 閱讀(1024) | 評論 (0)編輯 收藏

          僅列出標題
          共14頁: First 上一頁 6 7 8 9 10 11 12 13 14 下一頁 
          主站蜘蛛池模板: 靖江市| 黄陵县| 梅河口市| 阿拉尔市| 若羌县| 南通市| 天台县| 海丰县| 兴义市| 枝江市| 宁明县| 林州市| 武夷山市| 方山县| 哈巴河县| 旬邑县| 三明市| 横山县| 临颍县| 安塞县| 屯昌县| 清徐县| 贵港市| 中宁县| 商水县| 万盛区| 阜平县| 余江县| 荔波县| 灵山县| 巴中市| 垫江县| 沙雅县| 山阳县| 泸西县| 安乡县| 唐河县| 镇赉县| 维西| 绵阳市| 铜鼓县|