第七篇高级应用 <!ELEMENT time(#PCDATA)> <!ELEMENT value(#PCDATA) <!ATTLIST value(unit)> 显然,它所能表达的意思就少了很多 从Java等面向对象语言中引入的继承的特性,还包括了可以定义抽象元素来迫使实现 子类元素,或者定义一个终结元素来禁止元素再被其它元素所继承。这使得从元素到Java 或者C++语言的类的一一映射变得更为直观可行。 二、基数表达 ML Schema比起DTD来能够更方便的表达元素基数的概念。所谓基数是指一个元素 在文档中出现的次数。在DTD中,使用的是正则表达式来表示基数的,而正则表达式的表 达能力在所有的形式化文法中是最低的,这使得你在定义文档的时候会遇到很多的困难。你 只能够指定一次(1),零次或者更多(*),一次或者更多(+)这三种基数,并用这些基数序 列来构成DTD。 XML Schema中则是使用 minOccurs和 maxoccurs这两个属性来定义元素 基数,分别用来指定元素出现的最少次数和最多次数 <element ref="optional Element"minOccurs="0"7> <element ref="twoOrMoreElements"minOccurs=2 "maxOccurs="unbounded "A <element ref=exactly OneElement"/> min Occurs和 maxOccurs的缺省值都是1,也就是说,当没有指定这两个属性的时候, 元素只允许在文档中出现一次。除了这两个属性,你还可以用 choice和a这两个元素。元 素 choice只允许它的所有子元素中的一个出现在文档中。而元素all则最为宽松,能够让其 所有的子元素在文档中以任意的顺序出现任意的次数。而这些概念在DTD中都是难以表达 的 <xsd: choice> <element ref="Either This"/> <element ref="Or That"p> </xsd: choice <xsd: all> <element ref="Ying"I> <element ref="Yang"/ c/ xsd all>> 三、名域 XML Schema中还支持名域。一个 Schema除了可以定义XML文档词汇表外,还可以 通过名域来定义目标名域,和其它可能会使用到的词汇名域。例如 <xsd: schema targetnamespace=&single;http://www.physics.com/measurements&single; xminsxsd=&single;http://www.w3.org/1999/xmlschema&single: &single;http://www.physics.com/units&single>
第七篇 高级应用 <!ELEMENT time (#PCDATA)> <!ELEMENT value (#PCDATA)> <!ATTLIST value (unit)> 显然,它所能表达的意思就少了很多。 从 Java 等面向对象语言中引入的继承的特性,还包括了可以定义抽象元素来迫使实现 子类元素,或者定义一个终结元素来禁止元素再被其它元素所继承。这使得从元素到 Java 或者 C++语言的类的一一映射变得更为直观可行。 二、基数表达 XML Schema 比起 DTD 来能够更方便的表达元素基数的概念。所谓基数是指一个元素 在文档中出现的次数。在 DTD 中,使用的是正则表达式来表示基数的,而正则表达式的表 达能力在所有的形式化文法中是最低的,这使得你在定义文档的时候会遇到很多的困难。你 只能够指定一次(1),零次或者更多 (*),一次或者更多 (+) 这三种基数,并用这些基数序 列来构成 DTD。XML Schema 中则是使用 minOccurs 和 maxOccurs 这两个属性来定义元素 基数,分别用来指定元素出现的最少次数和最多次数: <element ref="optionalElement" minOccurs="0"/> <element ref="twoOrMoreElements" minOccurs="2" maxOccurs="unbounded"/> <element ref="exactlyOneElement" /> minOccurs 和 maxOccurs 的缺省值都是 1,也就是说,当没有指定这两个属性的时候, 元素只允许在文档中出现一次。除了这两个属性,你还可以用 choice 和 all 这两个元素。元 素 choice 只允许它的所有子元素中的一个出现在文档中。而元素 all 则最为宽松,能够让其 所有的子元素在文档中以任意的顺序出现任意的次数。而这些概念在 DTD 中都是难以表达 的。 <xsd:choice> <element ref="EitherThis"/> <element ref="OrThat"/> </xsd:choice> <xsd:all> <element ref="Ying"/> <element ref="Yang"/> </xsd:all/> 三、名域 XML Schema 中还支持名域。一个 Schema 除了可以定义 XML 文档词汇表外,还可以 通过名域来定义目标名域,和其它可能会使用到的词汇名域。例如: <xsd:schema targetNamespace=&single;http://www.physics.com/measurements&single; xmlns:xsd=&single;http://www.w3.org/1999/XMLSchema&single; xmlns:units= &single;http://www.physics.com/units&single;>
第七篇高级应用 <xsd: element name=&single; units&single; type=&single, units: Units&single, / <xsd: element name=&single, measurement&single; type=&single, measurement&single; / complex Type name=&single measurement&single <element name=&single; time&single; type=&single; time&single; / element name=&single value&single; type=&single, value&single 这种机制为建立复杂的名域体系提供了一种模块化而又易于扩展的方法。使得名域的作 用能够真正的被体现出来。 XML Schema提供了一个丰富而更具弹性的机制来定义XML文档词汇表。它使用XML 语言本身来定义关于一个XML文档的元信息(meta- information),这使得XML的协同工作 能力大大的增强了。而许多对于DID功能上的改进和增强,也使得它最终必定会终结DTD 作为XML的一个标准出现。在 Apache Project和 IBM alphaworks的主页上现在已经有很多 的 Schema的工具出现了,你如果有兴趣的话,不妨去看看 好了,有上面的介绍,我们来看如何从ⅹml文件中读取数据。 DataSet控件提供了 ReadXm方法。同时在XML文件中,必须存在 schema和我们所需要的数据(Data) 好了,有了上面的介绍,我们先看一下 datal. aspx文件 源文件: advanceappldatal.aspx <% Impo temI0"%> <% Import Namespace="System. Data"%> <html> <title> XML演示 </title> </head> <script language="VB"runat="server"> Sub Page Load(Src As Object, E As EventArgs Dim ds as new dataSet Dim fs as filestream Dim Reader as stream Reader FS=New FileStream(Server. Map Path("datal. xml"), FileMode Open, FileAccess. Read DS. Read Xml(Reader) Dir Source=new Data View(ds. Tables(O)) My Span. Inner Html= Source Table TableName My Data Grid Data Source= Source My Data Grid. DataBindo End Sub <script>
第七篇 高级应用 <xsd:element name=&single;units&single; type=&single;units:Units&single;/> <xsd:element name=&single;measurement&single; type=&single;measurement&single;/> <complexType name=&single;measurement&single;> <element name=&single;time&single; type=&single;time&single;/> <element name=&single;value&single; type=&single;value&single;/> </complexType> 这种机制为建立复杂的名域体系提供了一种模块化而又易于扩展的方法。使得名域的作 用能够真正的被体现出来。 XML Schema 提供了一个丰富而更具弹性的机制来定义 XML 文档词汇表。它使用 XML 语言本身来定义关于一个 XML 文档的元信息(meta-information),这使得 XML 的协同工作 能力大大的增强了。而许多对于 DTD 功能上的改进和增强,也使得它最终必定会终结 DTD, 作为 XML 的一个标准出现。在 Apache Project 和 IBM alphaworks 的主页上现在已经有很多 的 Schema 的工具出现了,你如果有兴趣的话,不妨去看看。 好了,有上面的介绍,我们来看如何从 xml 文件中读取数据。DataSet 控件提供了 ReadXml 方法。同时在 XML 文件中,必须存在 schema 和我们所需要的数据(Data)。 好了,有了上面的介绍,我们先看一下 data1.aspx 文件: 源文件:advanceapp\data1.aspx <%@ Import Namespace="System.IO" %> <%@ Import Namespace="System.Data" %> <html> <head> <title> XML 演示 </title> </head> <script language="VB" runat="server"> Sub Page_Load(Src As Object, E As EventArgs) Dim DS As New DataSet Dim FS As FileStream Dim Reader As StreamReader FS = New FileStream(Server.MapPath("data1.xml"),FileMode.Open,FileAccess.Read) Reader = New StreamReader(FS) DS.ReadXml(Reader) FS.Close() Dim Source As DataView Source = new DataView(ds.Tables(0)) MySpan.InnerHtml = Source.Table.TableName MyDataGrid.DataSource = Source MyDataGrid.DataBind() End Sub </script> <body>
第七篇高级应用 <center> <h3><font face="Verdana">XML iaz <span runat="server"id="MySpan"/</font></h3> ASP: Data Grid id="My Data Grid"runat="server"/> html 我们再来看看xm文件( advanceappldatal aspx)的内容: datal xml的文件如下 id=DocumentElement xmins="hTtp://www.w3.org/1999/xmlschema xmIns xdo="urn schemas-microsoft-com xml-xdoxdo DataSet Names"DocumentElement"> <element name="student"> <complex Type content="elementOnly"> <all> <element name="name"type="string"></element> <element name="age" type="int"></element> <element name="sex" type="string" ></element> <element name="grade"type"string"></element> </complex lype> <schema> <DocumentElement> <student> <name>jimmy</name> <sex>boy</sex> <grade>freshman</grade> </student> <student> </sex <student> <grade>freshman</grade> </student>
第七篇 高级应用 <center> <h3><font face="Verdana">XML 演示 <span runat="server" id="MySpan"/></font></h3> <ASP:DataGrid id="MyDataGrid" runat="server"/> </center> </body> </html> 我们再来看看 xml 文件(advanceapp\data1.aspx)的内容: data1.xml 的文件如下: <center> <root> <schema id="DocumentElement" targetNamespace="" xmlns="http://www.w3.org/1999/XMLSchema" xmlns:xdo="urn:schemas-microsoft-com:xml-xdo" xdo:DataSetName="DocumentElement"> <element name="student"> <complexType content="elementOnly"> <all> <element name="name" type="string"></element> <element name="age" type="int"></element> <element name="sex" type="string"></element> <element name="grade" type="string"></element> </all> </complexType> </element> </schema> <DocumentElement> <student> <name>jimmy</name> <age>20</age> <sex>boy</sex> <grade>freshman</grade> </student> <student> <name>Mary</name> <age>20</age> <sex>girl</sex> <grade>sophomore</grade> </student> <student> <name>Tom</name> <age>19</age> <sex>boy</sex> <grade>freshman</grade> </student>