分享
 
 
 

Schema Datatypes 小结

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

1. XML约束规则

a) 出现在最顶层的元素的集合。

b) 对每个元素,有效属性和嵌套元素的集合。

c) 对一个元素的每个可选属性,如果属性省略,提供默认值。

d) 在顶层和任何的嵌套层上,同等元素允许的顺序。

e) 在顶层和任何的嵌套层上,一个元素要求的和被允许的出现次数。

f) 对每个元素,它是否可以包含非结构化的文本(称为“CDATA”)。

2. 数据类型列表:

3. 值空间

a) Serialization Space:文档当中实际存储的内容。(实际存储)

b) Parsed Space:用Unicode表示的文档内容。(标准存储)

c) Lexical Space:文档内容的表示值。(表示值)

d) Value Space:文档内容的实际值。(实际值)

例子:

<a>1.00</a>

<b>1.0</b>

假定<a>,<b>的类型都为decimal

S Space

P Space

L Space

V Space

1.00

31 2E 30 30

00 31 00 2E 00 30 00 30

1.00

1

1.0

31 2E 30

00 31 00 2E 00 30

1.0

1

4. 空格处理

a) 空格替换(Serialization Space -> Parsed Space)

指将所有的Tab(#x9),换行(#xA)和回车(#xD)都替换为空格(#x20)。

b) 空格折叠(Parsed Space -> Lexical Space)

指删除所有位于开始和结束位置的空格,并把中间所有相邻的空格合并为一个空格。

5. 数据类型表示

任一数据类型都通过一三元组(value space,lexical space,facets)进行表示。

6. 字符串类型分支:

a) 结构图:

b) 概述:

主要用于表示与字符串相关的数据,这部分的类型一般都被认为是无序的。其中string类型是这部分的基类,他是唯一一种没有经过空格替换和空格折叠的类型。而normalizedString是表示经过了空格替换而没有经过空格折叠的类型,token则是用于表示既经过了空格替换又经过了空格折叠的类型。这三种类型都不用于表征某一特定类型。当需要某一特定类型时,可以使用token的更具体的子类,例如,当需要表示语言时可使用language,当需要表示某一名称时可使用Name,当需要表示ID值时可使用ID,当需要表示带名字空间的限定名时,可使用QName等。

7. 数值类型分支:

a) 结构图:

b) 概述:

主要用于表示与数值相关的概念,这部分的数据一般都是有序的。其中float和double用于表示IEEE 754标准的浮点数。decimal是数字的基类,他可以表示任意形式的数字,integer主要表示正数,通过对integer增加不同的facet,来限制他的值空间,我们可以得到其他具体的子类。

8. 时间类型分支:

a) 结构图:

b) 概述:

时间部分的类型大部分都是半有序的类型,而且与前述的两种类型不同,他们主要不是考互相集成和扩展得到的,而是都从基础类型中扩展而来。其中duration用于表示时间段的概念,他用于描述一个时间的跨度,而其他的类型都是一个时间点的概念,用于描述某一特定的时间点。

9. 自定义类型

除了内建类型之外,我们还可以通过Schema提供的扩展机制,进行自定义类型定义。其中扩展机制包括以下几种:

a) restriction

通过约束基类的Value Space来创建新类型。

i. 语法:

<restriction

base = QName

id = ID

{any attributes with non-schema namespace . . .}>

Content: (annotation?, (simpleType?, (minExclusive | minInclusive | maxExclusive | maxInclusive | totalDigits | fractionDigits | length | minLength | maxLength | enumeration | whiteSpace | pattern)*))

</restriction>

ii. 例子:

Schema:

<simpleType name='holidays'>

<restriction base='gMonthDay'>

<enumeration value='--01-01'/>

<enumeration value='--07-04'/>

<enumeration value='--12-25'/>

</restriction>

</simpleType>

XML:

<a holidays="--01-01"/> (正确)

<a holidays="--01-02"/> (错误)

b) list

用于表示由某一种类型组成的列表。通过itemType属性指定。

i. 语法:

<list

id = ID

itemType = QName

{any attributes with non-schema namespace . . .}>

Content: (annotation?, simpleType?)

</list>

ii. 例子:

Schema:

<simpleType name='listOfFloat'>

<list itemType='float'/>

</simpleType>

XML:

<a>1.0 2.0 3.1</a>(正确)

<a>1.0 32</a> (错误)

c) union

用于表示由多种类型组成的联合。

i. 语法:

<union

id = ID

memberTypes = List of QName

{any attributes with non-schema namespace . . .}>

Content: (annotation?, simpleType*)

</union>

ii. 例子:

Schema:

<xsd:simpleType>

<xsd:union>

<xsd:simpleType>

<xsd:restriction base="xsd:positiveInteger">

<xsd:minInclusive value="8"/>

<xsd:maxInclusive value="72"/>

</xsd:restriction>

</xsd:simpleType>

<xsd:simpleType>

<xsd:restriction base="xsd:string">

<xsd:enumeration value="small"/>

<xsd:enumeration value="medium"/>

<xsd:enumeration value="large"/>

</xsd:restriction>

</xsd:simpleType>

</xsd:union>

</xsd:simpleType>

XML:

<font size='large'>A header</font>(正确)

<font size='7'>this is a test</font>(错误)

10.facet

在restriction中出现的,用于约束Value Space的元素被称为“facet”。每种基础类型都规定了他可以使用的facet集合,详情可以参考Schema规范的Datatypes部分。另外,当我们从某一类型通过restriction进行扩展时,可能会在父,子类型之间使用了相同的facet,而根据facet的不同,Schema对此有不同的要求。

a) 进一步约束值的facet

对于enumeration, fractionDigits,maxExclusive,maxInclusive,maxLength,minExclusive,minInclusive,minLength和totalDigits,如果我们在子类型当中定义了与父类型相同的facet,那么对于facet的值,我们只能进一步进行约束,即子类型定义的Value Space必须是父类型的子集。例如,以下是一个错误的例子,因为子类型的Value Space不是父类型Value Space的子集。

<xs:simpleType name="minInclusive">

<xs:restriction base="xs:float">

<xs:minInclusive value="10"/>

</xs:restriction>

</xs:simpleType>

<xs:simpleType name="minInclusive2">

<xs:restriction base="minInclusive">

<xs:minInclusive value="0"/>

</xs:restriction>

</xs:simpleType>

b) 不能修改值的facet

对于length,子类型不允许修改父类型定义的length值。

c) 取值的交集的facet

对于pattern,当父,子类型都定义了该facet时,两个pattern的值都会被使用。

d) 特殊的facet

对于一般的facet来说,他们都是用来对Value Space进行约束的,而whiteSpace则是唯一的一个特例。该facet的作用时机是在Lexical Space之前,因此他是唯一一个有可能扩展了Lexical Space的facet。例如:

<xs:simpleType name="greetings">

<xs:restriction base="xs:string">

<xs:whiteSpace value="replace"/>

<xs:enumeration value="hi"/>

<xs:enumeration value="hello"/>

<xs:enumeration value="how do you do?"/>

</xs:restriction>

</xs:simpleType>

<xs:simpleType name="restricted-greetings">

<xs:restriction base="greetings">

<xs:whiteSpace value="collapse"/>

</xs:restriction>

</xs:simpleType>

greetings类型可以接受how do you do?,但会拒绝how do you do?,因为他没有出现在enumeration中。但restricted-greetings则可以接受后者,因为通过whiteSpace facet,他可以在Lexical Space之前先对how do you do?进行空格折叠,而变成enumeration 中的how do you do?。

e) 定义了固定属性的facet

除了enumeration和pattern之外,其他所有的facet都有一个“fixed”属性。当该属性的值为true时,子类型将不能再修改该facet的值。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有