初学xml

初学xml
很多朋友和我一样初学XML,我也是一个初学XML的新手,让我们在讨论中学习XML.
看过很多教程,大家还会问同样一个问题,XML是什么?XML是有什么用?这类问题.
我以自己的话来说明这些问题.
一个正确的概念很重要,其码不会失去方向.下面引用一位朋友的贴子来作回答:
XML 初学者普遍存在的问题
1 。XML是什么?(不要说是可扩展的标记语言之类的话)
2。XML可以做什么?怎么做?(不需要回答,只需要列举出一个简单的例子即可)
1: XML, 是用来 描迷数据 的.
2:举一个例子说明:有A数据库 B数据库,他们之间的标准不同,不能互传.那么你可以把数据放在XML中,而后就可以让A,B之间可以共同传输数据了.
补充:
首先要有一个概念,你最好不要去用XML设计网页,不是说不可以, 只是要说明,
XML 不是HTML的替代.
有了这个概念,就不会有很多的看完一个一个的教程,还不知道XML做什么,很明了
XML 就是为了描述数据
开始学习XML:
1.工具:XMLSPY2005,个人喜欢英文版.(当前下的2006英文版,注册有问题)
2.学习XML从那里开始?
   即我要说明的是:先写XML还是先写DTD或是XML Schemas.
   大多的教程从XML说起,再说DTD...再说XML Schemas...
   不过我个人觉的,先了解一下XML的基本语法,而后跳过DTD,从Schemas开始.
   这样不会让DTD搞的没兴趣..而后再对DTD作一定了解.这里要说明,我觉的先写好一个Schemas再写XML比较好.即,先建立模型.再去填数据.
下面的先从一个很简单的例子开始,让大家有点兴趣...
1.打开XMLSPY2005.点新建 此主题相关图片如下:
选XSD W3C XML Schemas.
2. 此主题相关图片如下:
作如图修改,而后点左侧的图标,进入下图
3. 此主题相关图片如下:
在Book上点右键选择Add child-->sequence.插入一个容器 此主题相关图片如下:
在刚刚的容器上再点右键.作Add child-->ELEMENT 此主题相关图片如下:
做如下填加,如Setup 4. 此主题相关图片如下:
点选最下面的TEXT.如图 此主题相关图片如下:
这里是源码.

6.
5.
4.


到这里实际上我们做了一个XML Schemas.很简单,以后在说明具体的意思.
我们现在可以点另存为,存为First.xsd.下面建立关于这个这个Schemas的XML文件.
再次选新建(不用关闭刚刚的XSD文件),这次选XML DOCUMNET文件.
出现下图: 此主题相关图片如下:
选Schema.指定刚刚的XSD的保存路径.
这时打开是以TEXT方式,我还是选最下面的Gird,出现下图: 此主题相关图片如下:
作如下图的改动: 此主题相关图片如下:
点保存为:First.xml


那么你此时可以点下边的TEXT.回到代码方式.就可以看到XML文件的内容.
你一定听说过"好的格式"与"有效格式"的概念.
到这里,你建立了一个Schemas文件,一个XML文件.
按F5,你可以检查这个XML文件是不是一个"好的格式",再按F8你可以查看他是不是一个"有效的格式".
下面再分析这个过程:
先看一下First.xml的代码:
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2005 rel. 3 U (http://www.altova.com) by  () -->
<Book xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="First.xsd">
 <name>XSLT</name>
 <author>Michael Kay</author>
 <price>$34.99USA</price>
</Book>
是不是很容易理解.可能不能理解就是那一长串的"网址",那是一个很重的概念.NAMESPACE.这个先不说,我们看代码:
<Book>
    <name>XSLT</name>
    <author>Michael Kay</author>
    <price>$34.99USA</price>
</Book>
<Book>...</Book> 是根元素.
<name>.<author>.<price>可以说是根元素下的子元素.
这里有几点注意:
1.一定要结束标记.如:<Book>...
</Book>
2.XML
元素大小写是不一样的:<Book>...</book>必定出错
3.要合理嵌套.<Book><name>...</Book></name>是错的细节很多,不详细说明.
其实我们现在就可以很容易的写一个XML文档,基于这个方式.
但还是不提倡先写XML再写DTD或是Schemas.
打个比方: XML是一个人,DTD AND SCHEMAS是马甲.首先要理解的就是我们用DTD和Schema是为了定义和约束XML的.好,我们先把这个约束和定义做好,即先做马甲.而后再给那个人穿上..我想这样是容易的,如果你先写XML再写马甲的的话...呵呵
再看那个First.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
 <xs:element name="Book">
  <xs:annotation>
   <xs:documentation>Comment describing your root element</xs:documentation>
  </xs:annotation>
  <xs:complexType>
   <xs:sequence>
    <xs:element name="name"/>
    <xs:element name="author"/>
    <xs:element name="price"/>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
</xs:schema>
Schemas 是以XML的表达形式定义和约束XML文件的.所以在语法上是相似的.
<xs:schema>...</xs:schema> 是Schemas申明.后面的接着是命名空间.
<xs:element name="Book">..</xs:element>是定义了元素Book.
<xs:annotation>
    <xs:documentation>Comment describing your root element</xs:documentation>
</xs:annotation>
这个是注释.
<xs:complexType>..</xs:complex> 复杂类型申明.
<xs:sequence>...</xs:sequence> 这其实就是在最初的时候所说的容器.相同的还有另外两个<all>...</all> and <choice>..</choice> sequence是顺序出现,all是乱序出现,choice选择性出现.如果你要在复杂类型里加入别的元素或是属性的话,那么必定有一个容器!
<xs:element name="name"/>
<xs:element name="author"/>
<xs:element name="price"/>
这三个是在Sequence包围中,现在可以理解容器的概念了吧..
上面还有一个要说的.
<xs:element name="name"/> 这其实是个空元素.在XML中空元素的申明就是这样子的.
这东西就不需要额外的结束标记了.
这是对两段代码的简单分析...
写一XML文档作一小结:
1.元素,属性和值
   <name language="english">Tiger</name>
2.书写XML的规则
   1).根元素是必须的
   2).结束标记是必须的
   3).元素的嵌套要适当
   4).大小写敏感
   5).值必放在引号内
3.申明XML版本.
   <?xml version="1.0" encoding="UTF-8"?>
也就这形式,注意后的UTF.如果你有中文内容,改成gb2312吧这个encoding是可选的只有这一个例外.没有结束标记<?  ..... ?>
4.增加属性,属性是给元素增加一个额外的信息
<name
 language="English" >
5.
空元素
两种表式法:   <name></name>OR</name>两者是相同
6.注解:<!--      -->
7.五个特殊的符号
   &        & amp;
   <        & lt;
   >        & gt;
   "         & quot;
   '          & apos;
想在XML里表达出前面的符号,就用后面的代替.差不多这就些吧..

XML Schema
XML Schema 提供一个更丰富的XML文档结构定义,Schema是XML所写,用XML规范改写的DTD,同时增加扩充功能.
特点:1.一致性,与XML一致.可被XML编辑器编辑,可被XML分析器解析.
2.扩展性.对DTD进行扩充,引入数据类型
3.易用性.XML API(DOM AND SAX)只对XML实例有效.对DTD无效.
   Schemas可用DOM 和SAX方式
4.规范性,Schema用元素内容和属性来定义文档的整体结构,如那些元素可出现,元素间的关系,元素内容和属性,以及元素出现的顺序.
5.互换性.可交换彼此的Schema
下面再做一个小小的Schema来说明:
这个例子来自:A semantic Web Primer.
先看下图.是一个关于电子邮件的.
我们在上面的图中分析一下那图,我们就可以通过XMLSPY去完成,首先email(complex tyep下有head,body而head(complex)下有from,to,subject.而在from,to(complex type)之下又有name,address.
那么从这里我们大致可以理解复杂类型的定义,里面包含其它元素及属性.
复杂类型共有4种:
1.仅元素,包含其它的元素及属性,但没有文本.
2.空元素,可能包含属性,但没有元素及文本
3.混合.元素.属性and/or文本
4.仅文本.
从上面的分析,我们心里有了,要有几个复杂类型,都是什么了...所以做起来应是很轻松的.
打开XMLSPY,很容易就搞定他
1.新建,不用说了吧.Schemas.写根元素:email
2.接着建一系列的复杂元素(点图上最左上角那个图标),内容如下 此主题相关图片如下:
有emailType(head,body).点emailType进去建立.如下图 此主题相关图片如下:
返回再再点headType 此主题相关图片如下:
此主题相关图片如下:
这次不点进去了,点下面的框就可以了.如图mouse的位置
6.我们想在body下除了文本还要加一个符件,这样他又是复杂类型 此主题相关图片如下:
对于这个body里面的attachment我们想可能有编码的问题,所以我们还要限定它;
还是一个复杂型.但这次我们要用一下简单型了....

7.

5.nameAddress.
4.
3,email
此主题相关图片如下:

此主题相关图片如下:
照着图上所表示的一样,完成这一步.
下边的那图你要注意,应用枚举..看图中发亮的部分点一下,而后是右面的细节那里你点
SimpleType
到这里我们把小零件弄完了 , 那么现在装一下
8.
组合 , 再加一些属性 ...
点最上面的 eamil, 进去以后 , 点右面的 type, emailType, 如图 此主题相关图片如下:
出来后再点 emailType. 做法同上 , 加进去 此主题相关图片如下:
此主题相关图片如下:

再点 headType.. from and to 加上 nameAddressType. 此主题相关图片如下:

再加这里的 subject 加上一个类型 ,xs:string.
这这里算是完成了我们这个 schemas.
最后用 F8, 验证一下 !
这里的源代码很简单的 ... 而后自己分析一下源代码 .... 你可以做一步就软到源码里去分析一下的 ... 这样容易加深记忆 ..
付上关于这个email的DTD:
<!ELEMENT email (head,body)>
<!ELEMENT head (from,to+,subject)>
<!ELEMENT from EMPTY>
<!ATTLIST from
name CDATA #IMPLIED
address CDATA #REQUIRED>
<!ELEMENT to EMPTY>
<!ATTLIST to
name CDATA #IMPLIED
address CDATA #REQUIRED>
<!ELEMENT subject (#PCDATA)>
<!ELEMENT body (text,attachment*)>
<!ELEMENT text (#PCDATA)>
<!ELEMENT attachment EMPTY>
<!ATTLIST attachment
encoding (mime|binhex) "mime"
file CDATA #REQUIRED>
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值