Xml xQuery xsl学习
- XML基础
- XML结构
XML是EXtensible Markup Language的缩写
XML是一种类似于HTML的标记语言
XML是用来描述数据的
XML的标记不是在XML中预定义的,你必须定义自己的标记
XML使用文档类型定义(DTD)或者模式(Schema)来描述数据
XML使用DTD或者Schema后就是自描述的语言
XML验证
- DTD
- Schema
XML结构:
<?xml version="1.0" encoding="ISO-8859-1"?> |
文档的第1行:XML声明——定义此文档所遵循的XML标准的版本,在这个例子里是1.0版本的标准,使用的是ISO-8859-1 (Latin-1/West European)字符集。
文档的第2行是根元素
注意点:
- XML标记都是大小写敏感的
- 属性值必须使用引号""
- 使用XML,空白将被保留
- 使用XML, CR / LF 被转换为 LF
XML元素命名必须遵守下面的规则:
- 元素的名字可以包含子母,数字和其他字符。
- 元素的名字不能以数字或者标点符号开头。
- 元素的名字不能以XML(或者xml,Xml,xMl...)开头。
- 元素的名字不能包含空格。
避免使用属性?这里有一些使用属性引发的问题:
- 属性不能包含多个值(子元素可以)。
- 属性不容易扩展。
- 属性不能够描述结构(子元素可以)。
- 属性很难被程序代码处理。
- 属性值很难通过DTD进行测试。
元数据(与数据有关的数据)应该以属性的方式存储,而数据本身应该以元素的形式存储。
XML验证
DTD
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE note SYSTEM "InternalNote.dtd"> |
Schema
XSL处理xml文档
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/xsl" href="simple.xsl"?> |
XML数据岛
使用非官方标准的<xml>标记可以将XML数据嵌入到HTML页面中。
XML数据可以象下面的例子那样嵌入HTML页面:
<xml id="note"> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> </xml> |
或者象下面这样嵌入外部单独的XML文件:
<xml id="note" src="note.xml"> </xml> |
注意那个<xml>标记是一个HTML元素,而不是一个XML元素。
数据绑定
XML数据岛可以绑定到HTML元素上(比如表格)。
在下面的例子中,一个XML数据岛(ID=cdcat)被从外部XML文档载入。一个HTML的表格绑定到此数据岛上。HTML表格内部的span元素使用datafld属性和XML文档相应的XML元素相互绑定。
<html> <body> <xml id="cdcat" src="cd_catalog.xml"></xml> <table border="1" datasrc="#cdcat"> <tr> <td><span datafld="ARTIST"></span></td> <td><span datafld="TITLE"></span></td> </tr> </table> </body> </html> |
微软的XML解析器
微软的XML解析器是和IE5.0+浏览器捆绑在一起的。
一旦你安装了IE5.0,那么就获得了XML解析器。这个浏览器除了被浏览器内部调用外,还可以在脚本中或者程序中调用。这个解析器的特点是支持与程序设计语言无关的编程模型,他支持以下技术:
JavaScript, VBScript, Perl, VB, Java, C++ 等等
W3C XML 1.0 和 XML DOM
DTD 和 XML文档验证
如果浏览器使用JavaScript作为脚本语言,那么利用下面的代码可以创建XML文档对象:
var xmlDoc=new ActiveXObject("Microsoft.XMLDOM")
如果浏览器使用VBScript作为脚本语言,那么利用下面的代码可以创建XML文档对象:
set xmlDoc=CreateObject("Microsoft.XMLDOM")
如果在ASP程序中使用VBScript脚本语言,那么就可以使用下面的代码形式:
set xmlDoc=Server.CreateObject("Microsoft.XMLDOM")
下面的代码可以将一个XML文档载入解析器:
<script type="text/javascript">
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("note.xml")
// ....... processing the document goes here
</script>
第二行代码创建Microsoft XML解析器的实例。
第三行代码关闭异步载入,确保XML解析器在把XML文档完全载入以前不会对XML文档进行解析。
第四行则告诉解析器需要载入的XML文档名字是note.xml。
把纯XML文档由字符载入解析器
解析器可以从一个文本字符串中载入XML文本。
下面的代码演示了将文本字符串载入解析器:
<script type="text/javascript">
var text="<note>"
text=text+"<to>Tove</to><from>Jani</from>"
text=text+"<heading>Reminder</heading>"
text=text+"<body>Don't forget me this weekend!</body>"
text=text+"</note>"
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.loadXML(text)
// ....... processing the document goes here
</script>
注意这里载入字符串使用的是"loadXML()"方法)(而不是前面用过的"load()"方法), "loadXML()"是用于载入字符串,"load()"是用于载入XML文档。
使用JavaScript语言显示XML数据
可以使用JavaScript语言来显示XML数据。
JavaScript (或者 VBScript)可以从XML文档中导入数据,并将这些数据在HTML页面中显示出来。
命名空间
作用:防止名字冲突
命名空间属性一般放置在元素的开始标记处,其使用语法如下所示:
xmlns:namespace-prefix="namespace"
在上面的例子中,命名空间定义了一个Internet 地址:
xmlns:f=http://www.w3schools.com/furniture
W3C 命名规范声明命名空间本身就是一个统一资源标示符,Uniform Resource Identifier (URI)。
默认的命名空间
定义一个默认的XML命名空间使得我们在子元素的开始标记中不需要使用前缀。他的语法如下所示:
<element xmlns="namespace">
其他的注意点:
CDATA:
转义字符:
&..;
编码:
如果你的XML文档和你的XML文档的编码格式不匹配就可能导致错误发生
Xml行为:behavior
Xml和Namespace
在xml中,定义了namespace,如果要验证xml文档的有效性,需要这些namespace相关的xsd文档。
<xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema “ Xmlns:other=“http://www.w3.org/XML/1998/namespace” ….. > <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd"/> …. </xs:schema>
|
或者
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" Xmlns:other=http://www.w3.org/XML/1998/namespace other:schemaLocation="xml.xsd"> …. </xs:schema>
|
Include 与 import差别:
Include需要引用的xsd与引用者要有相同的namespace,否则就要用import
写Schema
类型: simpleType complexType