首页 > 代码库 > 《语义网基础教程》学习笔记(一)
《语义网基础教程》学习笔记(一)
一、XML概述
1、有效(valid)的XML文档:遵守了XML文档的基本规则,并使用DTD或Schema定义了语义约束,而且也完全遵守了DTD或Schema所定义的语义约束的XML文档
2、XML声明部分的encoding属性值应该与保存该文档所使用的字符集相同。如果需要让XML支持中文,应该注意以下几点:
①保存文件时使用支持中文的字符集
②XML声明部分的encoding属性应该与保存该文件时所使用的字符集相同
3、XML元素里的多个属性之间是无序的,因此同一个元素不可包含多个同名的属性,XML元素的属性必须有属性值;
XML的子元素则是有序的,因此同一个元素可以包含多个同名的子元素;子元素顺序不同,则XML文档所表达的意义也就不同了。
这正如Java集合里的Set和List,Set代表无序元素,集合不可重复。List代表元素有序,集合元素可以重复的集合。
4、空元素:
如<book></book>等价与<book />但与<book> </book>不同,注意空元素与元素内容为空的区别
空元素可以接受多个属性如:<book name="Hadoop权威指南" price="12.8"></book>
5、W3C观点:元数据才应该存储为属性,而数据本身则应该存储为元素。应该尽量使用元素来描述数据,而仅仅使用属性来提供与数据无关的信息。
在实际开发中如果使用XML交换数据,优先考虑使用子元素来存储数据。用子元素的缺点是XML文档会变得臃肿。
6、语义约束:
使用XML交换数据的双方相互约定一套规则,XML创建者按这套规则保存信息,而XML接受者按这套规则读取信息。这套规则应该以一种独立的形式存在,然后交给XML创建者和使用者共同遵守。XML将其称为语义约束。
7、内部DTD例子
注:<!ELEMENT 计算机书 (书名,作者,价格,介绍)>这一行定义的子元素有严格的顺序要求,XML文档中要遵守
9、共用DTD,一般由某个权威机构定制,通过PUBLIC关键字引入,使用共用DTD时还需给共用DTD指定一个标识名。
引用公用DTD的格式:
<!DOCTYPE 根元素
PUBLIC "DTD的标识名" "公用DTD的URI">
10、DTD必须定义XML文档中出现的所有元素。
11、每个<!ATTLIST...>定义一个属性
属性的约束规则:#REQUIRED(必须的属性)、#IMPLIED(可有可无)、#FIXED(属性值是固定的)
12、实体是可以自定义的
定义:<!ENTITY java "疯狂Java讲义">
引用:&java;
大多数时候定义实体都是为了减少字符输入
定义参数实体(只比定义普通实体多了个%)
<!ENTITY % 实体名 "实体值">
引用:%实体名;
注:参数实体一定要先定义后使用,而且参数实体只能在DTD中使用
定义外部实体
<!ENTITY 实体名 SYSTEM "实体所在文件的URI">
注:保存外部实体值的外部文件必须满足:该文件是一个文本文件、该文件是满足XML要求的结构化文档
13、Schema概述及其优势
XML Schema是DTD的替代者,它采用了标准的XML语法来定义XML文档语义约束,不仅可以定义XML文档的结构还可以定义XML文档的内容约束
<schema>元素是每一个XML Schema的根元素:
<?xml version="1.0"?>
<xs:schema>
...
...
</xs:schema>
<schema> 元素可包含属性。一个 schema 声明往往看上去类似这样:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">
...
...
</xs:schema>
解释:
xmlns:xs="http://www.w3.org/2001/XMLSchema"
显示 schema 中用到的元素和数据类型来自命名空间 "http://www.w3.org/2001/XMLSchema"。同时它还规定了来自命名空间"http://www.w3.org/2001/XMLSchema" 的元素和数据类型应该使用前缀 xs:
targetNamespace="http://www.w3school.com.cn"
显示被此 schema 定义的元素 (note, to, from, heading, body) 来自命名空间: "http://www.w3school.com.cn"。
xmlns="http://www.w3school.com.cn"
指出默认的命名空间是 "http://www.w3school.com.cn"。
elementFormDefault="qualified"
指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。
14、一个学习xml的主页:http://bbs.xml.org.cn/dispbbs.asp?boardID=23&ID=7076
15、Schema的数据类型
(1)字符串相关类型
(2)数值类型
(3)日期类型
(4)boolean类型
(5)anyURI类型
(6)二进制数据
16、使用限制派生新类型
1、有效(valid)的XML文档:遵守了XML文档的基本规则,并使用DTD或Schema定义了语义约束,而且也完全遵守了DTD或Schema所定义的语义约束的XML文档
2、XML声明部分的encoding属性值应该与保存该文档所使用的字符集相同。如果需要让XML支持中文,应该注意以下几点:
①保存文件时使用支持中文的字符集
②XML声明部分的encoding属性应该与保存该文件时所使用的字符集相同
3、XML元素里的多个属性之间是无序的,因此同一个元素不可包含多个同名的属性,XML元素的属性必须有属性值;
XML的子元素则是有序的,因此同一个元素可以包含多个同名的子元素;子元素顺序不同,则XML文档所表达的意义也就不同了。
这正如Java集合里的Set和List,Set代表无序元素,集合不可重复。List代表元素有序,集合元素可以重复的集合。
4、空元素:
如<book></book>等价与<book />但与<book> </book>不同,注意空元素与元素内容为空的区别
空元素可以接受多个属性如:<book name="Hadoop权威指南" price="12.8"></book>
5、W3C观点:元数据才应该存储为属性,而数据本身则应该存储为元素。应该尽量使用元素来描述数据,而仅仅使用属性来提供与数据无关的信息。
在实际开发中如果使用XML交换数据,优先考虑使用子元素来存储数据。用子元素的缺点是XML文档会变得臃肿。
6、语义约束:
使用XML交换数据的双方相互约定一套规则,XML创建者按这套规则保存信息,而XML接受者按这套规则读取信息。这套规则应该以一种独立的形式存在,然后交给XML创建者和使用者共同遵守。XML将其称为语义约束。
7、内部DTD例子
注:<!ELEMENT 计算机书 (书名,作者,价格,介绍)>这一行定义的子元素有严格的顺序要求,XML文档中要遵守
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!-- 内部DTD,指定了文档的根元素:书籍列表--> <!DOCTYPE 书籍列表[ <!ELEMENT 书籍列表 (计算机书)*> <!ELEMENT 计算机书 (书名,作者,价格,介绍)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 价格 (#PCDATA)> <!ELEMENT 介绍 (#PCDATA)> ]> <书籍列表> <计算机书> <书名>hadoop权威指南</书名> <作者>zpc</作者> <价格>22</价格> <介绍>该书介绍了Hadoop的技术</介绍> </计算机书> </书籍列表>8、外部DTD
<!DOCTYPE 根元素名 SYSTEM "外部DTD的URI" > 如: <!DOCTYPE 书籍列表 SYSTEM "http://www.haodianying.org/dtd/book.dtd" > <!DOCTYPE 书籍列表 SYSTEM "book.dtd" > 外部DTD例子: book.dtd文件 <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT 书籍列表 (计算机书)*> <!ELEMENT 计算机书 (书名,作者,价格,介绍)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 价格 (#PCDATA)> <!ELEMENT 介绍 (#PCDATA)> outer.xml文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 书籍列表 SYSTEM "C:\Documents and Settings\zhou\桌面\book.dtd"> <书籍列表> <计算机书> <书名>hadoop权威指南</书名> <作者>zpc</作者> <价格>22</价格> <介绍>该书介绍了Hadoop的技术</介绍> </计算机书> </书籍列表>
9、共用DTD,一般由某个权威机构定制,通过PUBLIC关键字引入,使用共用DTD时还需给共用DTD指定一个标识名。
引用公用DTD的格式:
<!DOCTYPE 根元素
PUBLIC "DTD的标识名" "公用DTD的URI">
10、DTD必须定义XML文档中出现的所有元素。
11、每个<!ATTLIST...>定义一个属性
属性的约束规则:#REQUIRED(必须的属性)、#IMPLIED(可有可无)、#FIXED(属性值是固定的)
12、实体是可以自定义的
定义:<!ENTITY java "疯狂Java讲义">
引用:&java;
大多数时候定义实体都是为了减少字符输入
定义参数实体(只比定义普通实体多了个%)
<!ENTITY % 实体名 "实体值">
引用:%实体名;
注:参数实体一定要先定义后使用,而且参数实体只能在DTD中使用
定义外部实体
<!ENTITY 实体名 SYSTEM "实体所在文件的URI">
注:保存外部实体值的外部文件必须满足:该文件是一个文本文件、该文件是满足XML要求的结构化文档
13、Schema概述及其优势
XML Schema是DTD的替代者,它采用了标准的XML语法来定义XML文档语义约束,不仅可以定义XML文档的结构还可以定义XML文档的内容约束
<schema>元素是每一个XML Schema的根元素:
<?xml version="1.0"?>
<xs:schema>
...
...
</xs:schema>
<schema> 元素可包含属性。一个 schema 声明往往看上去类似这样:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">
...
...
</xs:schema>
解释:
xmlns:xs="http://www.w3.org/2001/XMLSchema"
显示 schema 中用到的元素和数据类型来自命名空间 "http://www.w3.org/2001/XMLSchema"。同时它还规定了来自命名空间"http://www.w3.org/2001/XMLSchema" 的元素和数据类型应该使用前缀 xs:
targetNamespace="http://www.w3school.com.cn"
显示被此 schema 定义的元素 (note, to, from, heading, body) 来自命名空间: "http://www.w3school.com.cn"。
xmlns="http://www.w3school.com.cn"
指出默认的命名空间是 "http://www.w3school.com.cn"。
elementFormDefault="qualified"
指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。
14、一个学习xml的主页:http://bbs.xml.org.cn/dispbbs.asp?boardID=23&ID=7076
15、Schema的数据类型
(1)字符串相关类型
(2)数值类型
(3)日期类型
(4)boolean类型
(5)anyURI类型
(6)二进制数据
16、使用限制派生新类型
例子1: order1.xsd文件 <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" > <xsd:element name="order"> <xsd:complexType> <xsd:sequence> <xsd:element ref="orderItem" maxOccurs="10"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="orderItem"> <xsd:complexType> <xsd:sequence> <!--自定义的两个类型--> <xsd:element name="id" type="idType"/> <xsd:element name="quantity" type="quantityType"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:simpleType name="idType"> <xsd:restriction base="xsd:string"> <!--枚举类型--> <xsd:enumeration value=http://www.mamicode.com/"7-5058-3496-7"/>>14、合并多个schemaincluded.xsd: <?xml version="1.0" encoding="UTF-8"?> <zpc:schema xmlns:zpc="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" > <zpc:simpleType name="age_Type"> <zpc:restriction base="zpc:int"> <zpc:maxExclusive value=http://www.mamicode.com/"100"/>>
17、命名空间详解例子1: namespace.xsd <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.zpc.com/schema" xmlns="http://www.zpc.com/schema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <!--定义一个book-list元素--> <xs:element name="book-list"> <xs:complexType> <xs:sequence> <!--使用当前schema里的book元素,因为当前schema位于http://www.zpc.com/schema命名空间下,而且该命名空间没有指定对应限定短名,因此按如下格式使用book元素--> <xs:element ref="book" minOccurs="1" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <!--定义一个item_Type复杂类型--> <xs:complexType name="item_Type"> <xs:sequence> <xs:element name="book-name" type="xs:token"/> <xs:element name="price" type="xs:decimal"/> </xs:sequence> </xs:complexType> <!--这里使用http://www.zpc.com/schema下的item_Type类型时无需指定命名空间前缀--> <xs:element name="book" type="item_Type"/> </xs:schema> 对应的合格的xml文件: <?xml version="1.0" encoding="UTF-8"?> <book-list xmlns="http://www.zpc.com/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.zpc.com/schema file:///C:/Documents%20and%20Settings/zhou/%e6%a1%8c%e9%9d%a2/namespace.xsd"> <book> <book-name/> <price>1</price> </book> <book> <book-name></book-name> <price>3</price> </book> </book-list> 例子2:增加了命名空间前缀 <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.zpc.com/schema" xmlns:zpc="http://www.zpc.com/schema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <!--定义一个book-list元素--> <xs:element name="book-list"> <xs:complexType> <xs:sequence> <!--使用当前schema里的book元素,因为当前schema位于http://www.zpc.com/schema命名空间下,而且该命名空间指定了对应限定短名zpc,因此按如下格式使用book元素--> <xs:element ref="zpc:book" minOccurs="1" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <!--定义一个item_Type复杂类型--> <xs:complexType name="item_Type"> <xs:sequence> <xs:element name="book-name" type="xs:token"/> <xs:element name="price" type="xs:decimal"/> </xs:sequence> </xs:complexType> <!--使用http://www.zpc.com/schema下的item_Type类型时必须指定命名空间前缀--> <xs:element name="book" type="zpc:item_Type"/> </xs:schema> 例子3:XML允许为任何元素指定xmlns:prefix属性 <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.zpc.com/schema" xmlns:zpc="http://www.zpc.com/schema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <!--定义一个book-list元素--> <xs:element name="book-list"> <xs:complexType> <xs:sequence xmlns:java="http://www.zpc.com/schema"> <!--使用当前schema里的book元素,因为当前schema位于http://www.zpc.com/schema命名空间下,而且该命名空间也对应限定短名java,因此这里的限定名可以使用两种--> <xs:element ref="java:book" minOccurs="1" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <!--定义一个item_Type复杂类型--> <xs:complexType name="item_Type"> <xs:sequence> <xs:element name="book-name" type="xs:token"/> <xs:element name="price" type="xs:decimal"/> </xs:sequence> </xs:complexType> <!--限定名java只能作用在上面的位置,因为为某个元素指定了xmlns:prefix属性之后,该属性所引入的命名空间只对该元素及其子元素有效--> <xs:element name="book" type="zpc:item_Type"/> </xs:schema>在模式文档中,我们很容易就能区分出不同名称空间中的元素和类型,带有xs前缀的元素和类型属于http://www.w3.org/2001/XMLSchema名称空间,而其他的元素和类型则属于目标名称空间。
★需要注意的是,只有模式文档中的全局元素和全局属性才属于目标名称空间。
上例中book-list、item_Type都是全局的,而book-name、price是局部元素。
如果要限定局部元素和属性,可以通过xs:schema元素的elementFormDefault和attibuteFormDefault属性来设置。
为了指定模式文档中局部声明的元素必须被限定,可以将xs:schema元素的elementFormDefault属性的值设为"qualified"。
18、当需要在Schema中对指定命名空间下的元素(或属性)添加一致性约束时,必须为其添加短语作为前缀,否则一致性约束会认为只是对未命名
空间的元素(或属性)添加约束。
由于属性总是属于某个元素的,XML文档用户很容易确定该属性所处的命名空间-总是处于其所属元素所处的命名空间,因此通常无需添加限定短名
作为前缀,所以Schema中通常会指定attributeFormDefault="unqualified",表明在XML文档中使用局部属性时无需添加限定短名作为前缀。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。