xml----术语

第1课: 处理XML元素
----------------------------------------------------------------------------
----
什么是XML元素?
XML是一种标识语言,一组用来创建描述数据的语法标签的规则集。一个XML元素是由开
始标签、结束标签以及标签之间的数据构成的。开始和结束标签用来描述标签之间的数
据。标签之间的数据被认为是元素的值。例如,在下面一个XML元素的例子中,元素"di
rector"的值是"Ed Wood"。
<director>Ed Wood</director>
元素名("director")允许你把"Ed Wood"这个值标出来,这样你就能把这些数据同另外
类似的数据区分开来。例如,有可能另一个元素的值也是"Ed Wood"。
<actor>Ed Wood</actor>
由于每个元素都有不同的标签名,所以你能很容易把上面两个元素的值区别开来。如果
从语义上没有办法把数据标出来,两个有同样值的元素会混淆起来。
   

 

属性
一个元素可以包含一个或多个属性,属性是一个由“=”隔开的名称值,如:
<CITY ZIP="01085">Westfield</CITY>
在上面的例子中,ZIP="01085"是元素<CITY>的一个属性。属性用来给一个元素添加附加
的、次要的信息,通常是元信息,属性还可以使用缺省值,而元素却不能这样做。元素
的每一个属性可以以任意顺序进行说明,但仅能说明一次。
此外,XML标签对大小写敏感,因此以下这三个是不同的元素。
<City><CITY><city>

 

第2课: 处理XML文档
----------------------------------------------------------------------------
----
什么是XML文档?
一个基本的XML文档就是一个XML元素,它可以嵌套XML元素。例如,下面的XML元素“bo
oks”就是一个有效的XML文档。
<books>
    <book isbn="0345374827">
       <title>The Great Shark Hunt</title>
       <author>Hunter S. Thompson</author>
    </book>
</books>
处理指导
构建一个基本的XML文档需要记住关键的四点:
所有元素必须有结束标签;
所有元素必须正确的嵌套(不允许交迭元素);  

 

所有特征值必须加引号;
每一个文档都必须有一个唯一的第一元素和根节点

第3课 处理XML数据岛
----------------------------------------------------------------------------
----
什么是XML数据岛?
数据岛是指存在于HTML页面中的XML代码。数据岛允许你在HTML页面中集成XML,对XML编
写脚本,而不需要通过脚本或<OBJECT>标签读取XML。几乎所有能够存在于一个结构完整
的XML文档中的东西都能存在于一个数据岛中。包括处理指示、DOCTYPE声明和内部子集
。(注意,编码串不能放在数据岛中。)
<XML>元素标记数据岛的开始,它的ID属性提供了一个可以用来引用数据岛的名称。
数据岛的XML可以是内嵌的:
<XML ID="XMLID">
    <customer>
       <name>Herbert Hanley</name>
       <custID>81422</custID>
    </customer>  

 

</XML>
或者在XML标签中通过SRC属性引用:
<XML ID="XMLID" SRC="customer.xml"></XML>
也可以使用<SCRIPT>标签来创建一个数据岛:
<SCRIPT LANGUAGE="xml" ID="XMLID">
   <customer>
     <name>Mark Hanson</name>
     <custID>81422</custID>
   </customer>
</SCRIPT>

第4课: 使用XML对象模型
----------------------------------------------------------------------------
----
什么是XML对象模型?
XML对象模型是一个对象集,可以使用这个对象集来访问或处理存储在XML文档中的数据
。XML文档构成一颗树,树上的每一个元素可以看作是一个节点,具有不同属性和方法的
对象代表了树和它的节点,每个节点包含文档中的实际数据。
如何访问树中的节点?
可以通过象脚本来访问树中的节点。这些对象是在解析器装载并解析XML文档时由XML解
析器创建的。通过ID值可以引用树,或文档对象。在下面的例子中,MyXMLDocument是文
档的对象的ID值,使用文档对象的属性和方法可以访问树的根和子节点对象。根,或文
档元素,是最顶层的节点,子节点从根上扩展开形成XML树。根节点只可以在文档中出现
一次。
点击下面的数据岛可以展示用来访问每个节点的代码。根节点是<class>,它的子节点是
<student>,这个子节点还有两个子节点<name>和<GPA>。
<XML ID="MyXMLDocument">
   <class>
     <student studentID="13429">
       <name>Jane Smith</name>
       <GPA>3.8</GPA>
     </student>
   </class>
</XML>
下面列出了一些简单的属性和方法,可用来访问XML文档的节点。
XMLDocument:返回对XML文档对象模式的引用。
documentElement:返回XML文档的根节点。
childNodes:返回节点的孩子节点目录。
item:通过索引访问目录中的个别节点。索引值是从0开始的,所以item(0)返回第一个
节点。
text:返回节点的内容。
下面是一个带有数据岛的HTML页面。数据岛被包含在<XML>元素中。
<HTML>
    <HEAD>
        <TITLE>HTML with XML Data Island</TITLE>
    </HEAD>
    <BODY>
         <P>Within this document is an XML data island.</P>
         <XML ID="resortXML">
             <resorts>
                 <resort>Calinda Cabo Baja</resort>
                 <resort>Na Balam Resort</resort>
             </resorts>
         </XML>
    </BODY>
</HTML>
你能通过ID属性访问数据岛,“resortXML”成为文档对象的名称。你能利用这个对象的
方法和属性访问它的根节点和孩子节点。在上面的例子中,根节点是<resorts>,孩子节
点是<resort>。
下面的代码访问第二个孩子节点<resort>并返回它的内容“Na Balam Resort”。
resortXML.XMLDocument.documentElement.childNodes.item(1).text
如何获得XML DOM树的信息?
有以下几种方法和接口来获得DOM的信息。
如果使用脚本语言,DOMDocument对象提供load、loadXML、save方法和xml属性。
对Visual Basic 和 C 或 C++ 编程者来说,IXMLDOMDocument接口提供和DOMDocument对
象同样的成员。
IXMLDOMDocument也可以实现标准的COM接口,如IPersistStreamInit、IPersistMonike
r和IStream。

第5课:使用XML名域
----------------------------------------------------------------------------
----
什么是XML名域?
XML名域是一组可以用作XML文档的元素或属性名称的名称集。为了避免元素之间出现相
同名称的冲突,名域限定Web中的名称必须是唯一的。名域由某些URI(Universal Reso
urce Identifier)来进行识别,不管是URL(Uniform Resource Locator),还是URN(
Uniform Resource Number)都没有关系,它并不管指向的什么内容。URI使用简单,因
为它们在Internet上是全球唯一的。
名域可以显式声明,也可以缺省声明。在显式声明中可以定义一个简写形式或是一个词
头来代替整个名域,可以使用这个词头来引用属于名域的元素。当节点包含不同名域的
元素时,显式声明非常有用。缺省声明声明一个可以被所有元素访问的名域,而且并不
定义词头。
<BOOKS>
   <bk:BOOK xmlns:bk="urn:BookLovers.org:BookInfo"
            xmlns:money="urn:Finance:Money">  

 

     <bk:TITLE>A Suitable Boy</bk:TITLE>
     <bk:PRICE money:currency="US Dollar">22.95</bk:PRICE>
   </bk:BOOK>
</BOOKS>
所有以"bk:"或"money:"开头的元素都可以看成是分别来自于名域"urn:BookLovers.org
:BookInfo"或"urn:Finance:Money"。
如何声明缺省名域?
在名域声明时没有词头就属于文档的缺省名域,文档中所有没有词头的元素和属性都属
于缺省名域。下面的例子声明了<BOOK>元素和<BOOK>中所有的元素(<TITLE>, <PRICE>
, currency)都属于名域"urn:BookLovers.org:BookInfo."。
<BOOK xmlns="urn:BookLovers.org:BookInfo">
   <TITLE>A Suitable Boy</TITLE>
   <PRICE currency="US Dollar">22.95</PRICE>
</BOOK>

第6课 使用XML Schema
----------------------------------------------------------------------------
----
什么是XML Schema?
XML Schema是一个基于XML的语法或schema规范,用来定义XML文档的标记方式。XML Sc
hema是一个由Microsoft建议的schema规范,它与文档类型定义(DTD)相比具有很大的
优势,而DTD是最初用来定义XML模型的schema规范。DTD存在很多缺点,包括使用非XML
语法,不支持数据类型定义,不具有扩展性等。例如,DTD不允许把元素内容定义为另外
一个元素,或字符串。想了解更多有关DTD的内容,可以参考W3C XML建议书。 XML Sch
ema从几个方面改善了DTD,包括使用XML语法,支持数据类型定义和名域。例如,XML S
chema允许你把一个元素说明为一个integer, float,Boolean, URL等类型。
在Internet Explorer 5中的XML解析器可以解析使用DTD或XML Schema的XML文档。
如何建立XML Schema?
请在下面的XML文档中找一找每个节点的schema声明。
<class xmlns="x-schema:classSchema.xml">
       <student studentID="13429">
          <name>Jane Smith</name>
          <GPA>3.8</GPA>
      </student>
</class>
你会注意到在上面文档中默认的名域是“x-schema:classSchema.xml”。这告诉解析器
根据URL(“classSchema.xml”)上的schema(x-schema)来解析整个文档。
下面是上面那个文档的完整的schema。注意schema的根元素中的名域声明。第一个(xml
ns=”urn:schemas-microsoft-com:xml-data”)表明这个XML文档是一个XML Schema。第
二个(xmlns:dt=”urn:schemas-microsoft-com:datatypes”)允许schema处理者在Elem
entType和AttributeType声明中的type属性前加dt前缀来说明元素的类型和内容的特征

<Schema   xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-mi
crosoft-com:datatypes">
      <AttributeType name='studentID' dt:type='string' required='yes'/>
      <ElementType name='name' content='textOnly'>
      <ElementType name='GPA' content='textOnly' dt:type='float'/>
      <ElementType name='student' content='mixed'>
          <attribute type='studentID'/>
          <element type='name'/>
          <element type='GPA'/>
      </ElementType>
      <ElementType name='class' content='eltOnly'>
          <element type='student'/>
      </ElementType>
</Schema>
用来定义元素和属性的声明元素如下所示:
元     素
说     明
ElementType 把类型和条件赋给一个元素,可以包含子元素
AttributeType 把类型和条件赋给一个属性
attribute 声明以前定义过的属性类型可以出现在名为ElementType的元素的作用域中
element 声明以前定义过的元素类型可以出现在名为ElementType的元素的作用域中
 
Schema的内容以最深层的元素的“AttributeType”和“ElementType”声明开头。
<AttributeType name='studentID' dt:type='string' required='yes'/>
<ElementType name='name' content='textOnly'>
<ElementType name='GPA' content='textOnly' dt:type='float'/>
ElementType声明后接着就是它的属性和子元素,如果一个元素有属性或子元素,必须把
这种方法包含在它的ElementType声明中,或者是必须在它们自己的 ElementType 或 A
ttributeType声明中进行前导声明。
<ElementType name='student' content='mixed'>
      <attribute type='studentID'/>
      <element type='name'/>
      <element type='GPA'/>
</ElementType>
不同于DTDs,XML Schema允许有一个开放的内容模式,你可以进行定义数据类型、使用
默认值等等操作而不必限定内容。
在下面的schema中,<GPA> 元素的类型被定义并有一个默认值,但在 <student> 元素中
没有其他节点被声明。
<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-mic
rosoft-com:datatypes">
       <AttributeType name="scale" default="4.0"/>
       <ElementType name="GPA" content="textOnly" dt:type="float">
          <attribute type="scale"/>
       </ElementType>
       <AttributeType name="studentID"/>
       <ElementType name="student" content="eltOnly" model="open" order="many
">
          <attribute type="studentID"/>
          <element type="GPA"/>
       </ElementType>
</Schema>
上面的schema允许你只验证你所关心的区域,这使你对文档的验证级别有更多的控制,
并允许你使用schema提供的一些特性而不必严格确认。
尝试一下!
试着处理一下下面的XML文档的schema。
<order>
   <customer>
     <name>Fidelma McGinn</name>
     <phone_number>425-655-3393</phone_number>
   </customer>
   <item>
     <number>5523918</number>
     <description>shovel</description>
     <price>39.99<price>
   </item>
   <date_of_purchase>1998-10-23</date_of_purchase>
   <date_of_delivery>1998-11-03</date_of_delivery>
</order>
如果你处理完schema,在XML Validator中运行 .
下载MSDN Online的区域中提供了一套 XML sample files, 包括一个有相关schema的XM
L文档。下载这些示例程序可以与XML文档和schema一起运行。如果你想要根据一个sche
ma来测试XML的有效性,可以从XML Validator 处下载文档或查看Mime Type Viewer中的
XML文件。
一些说明:
ElementType和 AttributeType 声明必须放在attribute和element内容声明之前。例如
,在上面的schema中,<GPA>元素的ElementType声明必须放在<student>元素的Element  

 

Type声明之前。 
order属性的默认值是建立在content属性的值上的。当content值为“eltOnly”时,or
der默认值是seq。当content值为“mixed”时,order默认值是“many”。see 如果想了
解有关这些缺省值的信息,可以查看 XML Schema Reference。

第7课:在XML文档中使用数据类型
----------------------------------------------------------------------------
----
什么是XML文档中的数据类型?
XML文档中的数据类型是赋给实例中一个元素的类型,可以使用dt:dt属性来实现,也可
以通过一个XML Schema,一个XML文档的正式定义来实现。此外,数据类型可以声明为元
素,XML解析器使用数据类型信息来验证文档的有效性。
以前,XML元素的值局限于一个单一的类型String,因此想要处理XML文档的开发者需要
花费大量的时间来把应用程序中的所有值都转换为一种类型。输入数据时解析器将会注
意到数据类型的转换。此外,因为这些值都赋予一个特定的数据类型,所以对这些值的
转换遵循要数据类型的规范,这就提供了一种验证用户输入有效性的方法。
除了有一个String的值,每一个XML元素也可以有一个类型定义的值,例如下面的XML元
素:
<date>1970-09-30</date> 
如何对XML元素值进行数据类型定义?
看一看下面的XML文档:
<?xml version="1.0"?>
<weather xmlns="x-schema:weatherSchema.xml">
   <date>1970-09-30</date>
   <degrees>67.5</degrees>
</weather>
其中"weatherSchema.xml"是下面的文件。
<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-mic
rosoft-com:datatypes">
   <ElementType name="date" content="textOnly" dt:type="date"/>
   <ElementType name="degrees" content="textOnly" dt:type="float"/>
   <ElementType name="weather" content="eltOnly">
     <element type="date"/>
     <element type="degrees"/>
   </ElementType>
</Schema>
上面的schema是一个把数据类型赋给前面的XML文档的正式定义。属性xmlns是声明名域
的XML关键字,声明'xmlns:dt="urn:schemas-microsoft-com:datatypes"'把dt赋给名域
"urn:schemas-microsoft-com:datatypes.",任何定义为dt的类型都属于名域"urn:sch
emas-microsoft-com:datatypes.".
Schema 和数据类型名域要在XML Schema的开始进行声明,这样dt词头可以用来指示数据
类型定义中使用那种 类型的属性。
<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-mic
rosoft-com:datatypes">
   <ElementType name="NUMBER" content="textOnly" dt:type="number"/>
对XML文档中的元素进行类型定义
元素可以通过元素实例的 dt 属性进行类型定义,而要这样做需要在XML文档的开始声明
数据类型名域。
<NUMBERS xmlns:dt="urn:schemas-microsoft-com:datatypes">
   <NUMBER dt:dt="number">44533</NUMBER>
</NUMBERS>
dt词头现在可以作为dt的属性把数据类型赋给元素的实例。
在XML文档中把数据类型作为元素使用
除了在元素的实例或schema中声明数据类型外,数据类型也可以作为元素使用,比较下
面的例子,第一个例子在元素的实例中声明数据类型:
<shoes xmlns:dt="urn:schemas-microsoft-com:datatypes" id="f1121" sizes="mens
"/>
<sizes id="mens">
   <size dt:dt="int">8</size>
   <size dt:dt="int">10</size>
   <size dt:dt="int">12</size>
</sizes>
第二个例子把类型声明为元素:
<shoes xmlns:dt="urn:schemas-microsoft-com:datatypes" id="f1121" sizes="arra
y1"/>  

 

<array id="array1">
   <dt:int>8</dt:int>
   <dt:int>10</dt:int>
   <dt:int>12</dt:int>
</array>
而通过schema是不可能对这种元素进行类型定义的。
在 XML Data Types Reference中,有一个可以在 XML文档中使用的数据类型的列表。

第8课:访问经过类型定义的XML值
----------------------------------------------------------------------------
----
什么是经过类型定义的XML值?
经过类型定义的XML值是指在XML Schema中被指定数据类型的元素值。XML解析器使用sc
hema来确认文档。XML Schema信息可以放在schema文件中,也可以放在本身的XML文档中

如何访问经过类型定义的XML值?
可以通过XML对象模型访问经过类型定义的数据。就好象你能通过调用元素节点的nodeV
alue属性找到元素值一样,你可以调用元素本身的nodeTypedValue属性找到经过类型定
义的元素值。
例如,考虑一下下面的XML文档:
<?xml version="1.0"?>
<weather xmlns="x-schema:weatherSchema.xml">
       <date>1970-09-30</date>
       <degrees>67.5</degrees>  

 

</weather>
其中“weatherSchema.xml”是下面这个文件:
<Schema xmlns="urn:schemas-microsoft-com:xml-data"xmlns:dt="urn:schemas-micr
osoft-com:datatypes">
        <ElementType name="date" content="textOnly" dt:type="date"/>
        <ElementType name="degrees" content="textOnly" dt:type="float"/>
        <ElementType name="weather" content="eltOnly"/>
            <element type="date"/>
            <element type="degrees"/>
        </ElementType>
</Schema>
如果你要定位<degrees>这个元素(xmlDocument.documentElement.childNodes.item(1
)),你可以按如下方式调用nodeTypedValue来访问它的类型定义值:
(xmlDocument.documentElement.childNodes.item(1).nodeTypedValue)。

第9课:使用C++ XML DSO
----------------------------------------------------------------------------
----
什么是C++ XML DSO?
Microsoft? Internet Explorer 5中内嵌了一个C++数据源对象(DSO),可以用来把XML连
接到HTML中。Microsoft? Internet Explorer 4中内嵌的Java XML DSO在Internet Exp
lorer 5中仍然支持,但是新的C++ DSO有更好的性能,还可以直接连接XML数据岛。
如何把XML连接到HTML上?
考虑下面的XML文件:
<universities>
   <university>
     <name>UCSB</name>
     <location>Santa Barbara, CA</location>
   </university>
   <university>
     <name>University of Texas at Arlington</name>
     <location>Arlington, TX</location>
   </university>
   <university>
     <name>USM</name>
     <location>Hattiesburg, MS</location>
   </university>
   <university>
     <name>Baylor</name>
     <location>Waco, TX</location>
   </university>
</universities>
可以用以下的HTML把这个XML连接到一个重复表中:
<XML ID=xmlDoc src="universities.xml"></XML>
<TABLE DATASRC="#xmlDoc" BORDER=1>
   <THEAD><TH>NAME</TH><TH>LOCATION</TH></THEAD>
   <TR>
     <TD><SPAN DATAFLD="name"></SPAN></TD>
     <TD><SPAN DATAFLD="location"></SPAN></TD>
   </TR>
</TABLE>
这里不需要<APPLET> 或 <OBJECT>标签,因为XML DSO已经为你完成了这些工作

第10课 :在C++ XML DSO中使用主/细节特征
----------------------------------------------------------------------------
----
什么是主/细节特征?
新的主/细节特征允许你连接到一个分层纪录集的当前记录上,这就意味着你可以把当前
纪录的子元素连接到一个截然不同的表中。例如,考虑一下的XML:
<orders>
   <order order_number="2233">
     <customer>
       <name>John Smith</name>
       <custID>192883</custID>
     </customer>
     <item>
       <name>Fly Swatter</name>
       <price>9.99</price>
     </item>
   </order>
   <order order_number="2234">
     <customer>
       <name>Marea Angela Castaneda</name>
       <custID>827145</custID>
     </customer>
     <item>
       <name>Fly Paper</name>
       <price>15.99</price>
     </item>
   </order>
   <order order_number="2235">
     <customer>
       <name>Amy Jones</name>
       <custID>998022</custID>
     </customer>
     <item>
       <name>Mosquito Netting</name>
       <price>38.99</price>
     </item>
   </order>
</orders>
你可以允许你的用户通过ID来定位订单,并显示(也仅能显示)当前订单上的客户和项
目信息,你的用户并不能查看所有订单的信息——仅能查看自己感兴趣的。
如何连接到细节?
连接到层次结构中的底层(细节信息)的关键是了解你的数据的结构,上面的XML在根元
素<orders>中含有有三个元素。基于XML DSO所采用的试探法,每一个订单都映射到一个
包含"order_number"、 "customer"、 和 "item"等域的行集中。"order_number"列包含
"order_number"属性的值,"customer"和"item"列包含指向各自的"customer"和"item"
纪录集的指针。"customer"记录集中包含带有"name"和"custID"域的元素的值,"item"
记录集中包含带有"name"和"price"域的元素的值。
这样,在顶层("orders")纪录集中,你可以找到"order_number"的值,然后允许你的
用户通过"order_number"定位订单。
<P>ORDER NUMBER: <SPAN DATASRC="#xmlDoc" DATAFLD="order_number"></SPAN></P>
现在再添加几个按钮来帮助用户浏览"orders"纪录集。
<INPUT TYPE=BUTTON VALUE="Previous Order" οnclick="xmlDoc.recordset.movePrev
ious()">
<INPUT TYPE=BUTTON VALUE="Next Order" οnclick="xmlDoc.recordset.moveNext()">

为了在当前纪录的子元素中检索这个值,创建一张表并把表的 DATASRC 属性设置为"#x
mlDoc",就和上面所作的一样,但是这时也要把它的 DATAFLD 属性设置为 "customer"
。这是为了告诉表连接到"customer"纪录集中的数据上,而"customer"纪录集由"order
s"纪录集中的"customer"域的指针指向。
<TABLE DATASRC="#xmlDoc" DATAFLD="customer" BORDER>
   <THEAD><TH>NAME</TH><TH>ID</TH></THEAD>
   <TR>
     <TD><SPAN DATAFLD="name"></SPAN></TD>
     <TD><SPAN DATAFLD="custID"></SPAN></TD>
   </TR>
</TABLE>
接着对"item"元素作同样的处理。
<TABLE DATASRC="#xmlDoc" DATAFLD="item" BORDER=1>
   <THEAD><TR><TH>ITEM</TH><TH>PRICE</TH></TR></THEAD>
   <TR>
     <TD><SPAN DATAFLD="name"></SPAN></TD>
     <TD><SPAN DATAFLD="price"></SPAN></TD>
   </TR>
</TABLE>
现在,当用户点击按钮并移到纪录集中的后一个或前一个纪录时,表中的数据会相应的
改变到当前纪录。

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值