扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:中国IT实验室 来源:中国IT实验室 2007年9月22日
关键字:
在本页阅读全文(共7页)
全局元素和属性
全局的元素和全局的属性是在全局声明时被建立的,全局声明都是作为元素的子元素出现的。一旦经过定义,全局元素或者全局属性可以像先前我们描述的那样使用ref属性在一个或多个声明中引用。一个引用全局元素的声明,允许被引用的元素在实例文档中出现在引用这个元素的声明相关的元素中。所以,举例来说, po.xml中的comment元素同样可以在shipTo、billTo和items元素中出现,因为引用comment的复合类型定义的声明同样出现在这三个元素的声明中。
一个全局元素的声明也允许元素在实例文档中以顶级的文档元素出现,因此purchaseOrder元素,在po.xsd中是作为一个全局元素声明的,能够作为po.xml.中的顶级元素出现。值得注意的是,基于这个基本原理, comment元素作为顶级元素出现在文档如po.xml中也是被允许的。
关于使用全局的元素和属性有很多忠告,其中一个忠告是全局的声明不能够包含引用。全局的声明定义不能包含ref 属性,他们必须使用type 属性(或者,像我们简短描述的,跟随一个匿名的类型的定义)。第二个忠告是约束不能够放在全局声明中。尽管他们能够放在引用全局声明的局部声明中。换句话说,全局声明不能够包含minOccurs、maxOccurs、或者use属性。
命名冲突
我们现在已经讨论了如何定义新的复合类型(比如PurchaseOrderType),声明元素(比如purchaseOrder)和声明属性(如orderDate)。这些行为一般都包含着命名,因此,问题自然就出现了:如果我们给两个对象赋予同样的名称会如何?答案取决于问题中的两个对象,尽管,一般来说两个对象越相近,他们越有可能引起冲突。
这里有一些例子来说明什么时候同样的名称会导致问题的出现。如果两个对象都是类型,如果我们去定义了一个复合类型称为USStates,同时又定义了一个简单类型称为USStates,此时就出现了冲突。如果两个对象是类型和元素或者是类型或者属性,当我们定义了一个复合类型叫USAddress,同时我们又定义了一个元素称为USAddress,此时是没有冲突发生的。如果两个对象是不同类型的元素(一般的,并非是全局元素),当我们声明了一个元素名字作为USAddress类型的一部分并且第二个元素名字作为item类型的一部分,此时就没有冲突(类似的元素有时候称为局部元素声明)。最后,如果两个对象都是类型,你自己定义了其中的一个,而XML Schema规范内置定义了另外的一个,比如你自己定义了一个简单类型称为decimal,那么此时没有冲突发生。最后一个例子中之所以没有命名冲突发生的原因是,因为他们属于不同的命名空间,我们将在后讨论在XML Schema中的XML命名空间的使用。
简单类型
在购买订单模式文档中,几个元素和属性被声明为简单类型,其中一些简单类型如 string 和decimal是XML Schema中内置的。而其他的一些则是源于(如果使用对象技术的语言,就是继承)内置的类型。举例来说,partNum属性的类型称为SKU(Stock Keeping Unit),是源于string.的。内置的简单类型和他们的后继版本都能够被用在所有的元素和属性声明中,下面的列表列举了所有的在XML Schema中内置的简单类型及其相应的例子。
简单类型 值示例 备注
string Confirm this is electric
normalizedString Confirm this is electric 参见 (3)
token Confirm this is electric 参见 (4)
byte -1, 126 参见 (2)
unsignedByte 0, 126 参见 (2)
base64Binary GpM7
hexBinary 0FB7
integer -126789, -1, 0, 1, 126789 参见 (2)
positiveInteger 1, 126789 参见 (2)
negativeInteger -126789, -1 参见 (2)
nonNegativeInteger 0, 1, 126789 参见 (2)
nonPositiveInteger -126789, -1, 0 参见 (2)
int -1, 126789675 参见 (2)
unsignedInt 0, 1267896754 参见 (2)
long -1, 12678967543233 参见 (2)
unsignedLong 0, 12678967543233 参见 (2)
short -1, 12678 参见 (2)
unsignedShort 0, 12678 参见 (2)
decimal -1.23, 0, 123.4, 1000.00 参见 (2)
float -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN 等同于单精度32位浮点数,其中”NaN”表示”不是一个数字”。参见 (2)
double -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN 等同于双精度64位浮点数。参见 (2)
boolean true, false1, 0
time 13:20:00.000, 13:20:00.000-05:00 参见 (2)
dateTime 1999-05-31T13:20:00.000-05:00 这个时间表示的含义是:1999年5月31日美东标准时间下午1:20,注意后面的-05:00表示这个时间比格林尼治时间早5个小时。参见 (2)
duration P1Y2M3DT10H30M12.3S 这表示经过了1年2个月3天又10个小时30分钟12.3秒。
date 1999-05-31 参见 (2)
gMonth --05-- 表示5月。参见 (2) (5)
gYear 1999 表示1999年。参见 (2) (5)
gYearMonth 1999-02 表示1999年2月,而并不关心是几号。参见 (2) (5)
gDay ---31 表示31号。参见 (2) (5)
gMonthDay --05-31 表示每个5月31号。参见 (2) (5)
Name shipTo XML 1.0的Name类型
QName po:USAddress XML命名空间的QName类型
NCName USAddress XML命名空间的NCName类型,即一个不带命名空间前缀修饰的QName
anyURI http://www.example.com/, http://www.example.com/doc.html#ID5
language en-GB, en-US, fr XML 1.0中定义的合法语言代码
ID XML 1.0中定义的ID属性类型。参见 (1)
IDREF XML 1.0中定义的IDREF属性类型。参见 (1)
IDREFS XML 1.0中定义的IDREFS属性类型。参见 (1)
ENTITY XML 1.0中定义的ENTITY属性类型。参见 (1)
ENTITIES XML 1.0中定义的ENTITYS属性类型。参见 (1)
NOTATION XML 1.0中定义的NOTATION属性类型。参见 (1)
NMTOKEN US, Brésil XML 1.0中定义的NMTOKEN属性类型。参见 (1)
NMTOKENS US UK, Brésil Canada Mexique XML 1.0中定义的NMTOKENS属性类型,即一个使用空格作为元素分隔的NMTOKEN列表。参见 (1)
注意:
为了在XML Schema和XML 1.0 DTD之间保持兼容,简单类型ID、IDREF、IDREFS、ENTITY、ENTITIES、NOTATION、NMTOKEN、NMTOKENS只能用在属性定义中;
这个类型的值能够表示为不止一种格式,如100和1.0E2都是有效的float格式,它们都表示”一百”这个数值。然而,对于这个类型而言,已经为其定义了规范的格式规则。
换行符、制表符和回车符在normalizedString中将会在处理前被转化成空格字符
作为normalizedString,相邻的空格字符将会被合并为一个空格字符,第一个和最后的空格将被移走
“g”前缀表示罗马历的时间和年代。
新的简单类型通过从现有的简单类型(内置的简单类型以及源于内置简单类型的简单类型)引出定义。特别的,我们通过重新约束一个现存的简单类型来引出一个新的简单类型。换句话说,新类型的合法值范围是现有类型的值范围的子集。我们使用simpleType元素来定义和命名新的简单类型,我们使用restriction元素来指出现有的基类型。并且用它来标识约束值范围的细节。
假设我们希望建立一个新的整数类型称为myInteger,他的值范围为10000到99999。我们的定义应当基于简单类型integer,然后定义他的值范围为10000到99999。为了定义myInteger,我们这样来约束integer的范围(参见下图):
使用基类型来定义新的简单类型
<xsd:simpleType name="myInteger">
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="10000"/>
<xsd:maxInclusive value="99999"/>
</xsd:restriction>
</xsd:simpleType>
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者