1、ICS 35.040 L 80 道B中华人民=lI工和国国家标准G/T 25061-2010 信息安全技术公钥基础设施XML数字签名语法与处理规范Information security technology-Public Key Infrastructure一X岛ILdigital signature syntax and processing specification 2010-09-02发布2011-02-01实施极轨防伪中华人民共和国国家质量监督检验检夜总局中国国家标准化管理委员会发布GB/T 25061-2010 目次前言.皿引言.N 1 范围.2 规范性引用文件3 术语、定义和缩
2、略语14 XML签名概述. 2 5 处理规则.3 6 核心签名语法.4 7 附加签名语法u附录A(规范性附录)XML数字签名文档类型定义17附录B(规范性附录)XML数字签名模式定义.25 附录c(资料性附录)算法30附录D(资料性附录)XML数字签名实例35参考文献. . 40 I 前言本标准的附录A和附录B是规范性附录,附录C和附录D是资料性附录。本标准主要参照Internet工程任务组(lETF)的RFC3275文件制定。本标准由全国信息安全标准化技术委员会CSAC/TC260)提出并归口。本标准起草单位:北京信安世纪科技有限公司、中国电子技术标准化研究所。本标准起草人:汪宗斌、张萌、黄
3、勇、周鹏、王延鸣。GB/T 25061-2010 而且GB/T 25061-2010 引XML是一种信息描述的置标语言,用于数据对象交换。它已经广泛地应用在电子商务、电子政务等应用之中,成为数据交换当中数据描述的基础格式,并且仍在不断发展当中。基于XML格式的数字签名是XML在安全领域的一种新的应用,与传统的PKCS#7数字签名相比,能够更好地与XML应用全主子. -。本标准凡涉及密码算法相关内容,标准文本中引用的RSA和SHA-l等密码算法为举例性说明,具体使用时均须采用国家密码管理局批准的相应算法。N GB/T 25061-2010 1 范围信息安全技术公钥基础设施XML数字签名语法与处理
4、规范本标准规定了创建和表示XML数字签名的语法和处理规则。XML数字签名为任何类型的数据提供了完整性、消息鉴别和签名者鉴别服务。本标准适用于制作和处理XML数字签名的应用程序、系统或服务。2 规范性引用文件下列文件中的条款通过本标准的引用而成为本标准的条款。凡是注日期的引用文件,其随后所有的修改单(不包括勘误的内容)或修订版均不适用于本标准,然而,鼓励根据本标准达成协议的各方研究是否可使用这些文件的最新版本。凡是不注日期的引用文件,其最新版本适用于本标准。GB/T 1988 信息技术信息交换用七位编码字符集(GB/T1988-1998 , eqv ISO/IEC 646-1991) GB 13
5、000. 1 信息技术通用多八位编码字符集(UCS)第一部分:体系结构和基本多文种平面(GB 13000.1-1993,idt ISO/IEC10646-1 :1 993) GB/T 16264. 8 信息技术开放系统互连目录第8部分:公钥和属性证书框架(GB/T 16264. 8-2005 ,ISO/IEC 9594-8:2001,IDT) GB/T 18793-2002 信息技术可扩展置标语言(XML)1. 0 (W3C RFC-xml :1 998 , NEQ) RFC 2253 轻型目录访问协议(v3):盟别名的UTF-8字符串表示RFC2396 统一资源标识符(URl):通用语法RF
6、C2732 URL中IPv6地址文字格式3 术语、定义和缩略语3. 1 术语和定义下列术语和定义适用于本标准。3. 1. 1 分离签名detached signature 签名于Signature元素以外的内容上,通过URI或者变换来进行标识,和它所签署的内容是分开的。即签名和数据对象位于不同XML文档中。适用于签名与数据分离的情形(即不同的XML文档), 或者相同的XML文件包括了签名和数据对象,但签名和数据对象是兄弟元素的情形。3. 1.2 封内签名enveloping signature 签名于Signature元素中的Object元素之上,以Signature为父元素,将原始文档包含在
7、Signature中的XML签名文档的组织形式。即通过对封装了的对象的签名进行封装。3. 1.3 封皮签名enveloped signature 签名于整个XML内容之上,然后将Signature作为子元素插入到原始文档中,组织成XML签名文档格式。即将签名封装到XML对象中,封皮签名在计算SignatureValue时不包含其自身。1 GB/T 25061-2010 3. 1. 4 引用确认reference validation 确认由Reference所指定的元素经变换后的摘要值是否与DigestV al ue指定的匹配。3. 1. 5 签名Signature 签名是由一个应用程序通过密
8、码算法用私钥运算所产生的值,具有完整性,消息鉴别和/或签名者鉴别的特性。签名有三种非独占的描述方式:分离签名、封内签名和封皮签名。3. 1.6 签名应用signature application 指实现了本标准要求的必备部分,且Signature元素类型的结构及其子结构符合本标准的要求的应用程序。3.1.7 签名确认signature vali由tion指核心确认中以Canoni沁cali泣zation巾岛M巳t由ho叫d指定的规范化方法和S缸ignatur陀eMethod指定的签名方法处理S缸19ne巳edlnf巾fo的结果是否与S缸19n川u盯reVa剖lu时E中的值匹配。3.1.8 签名
9、者鉴别signer authentication 用来声明标识签名者属性,签名应指明谁签署了一个文挡、消息或记录,他人没有授权很难产生。签名者鉴别由应用实现,本标准支持签名者鉴别,但具体如何鉴别由相关的鉴别标准规定。3. 1.9 变换transfotm 把一个数据从原始状态转化成导出状态的处理。典型的变换包括XML规范化,XPath和XSLT。3.2 缩略语下列缩略语适用于本标准:CRL 证书撤销员j表(Certification Revocation Lst) DN M瓦别名(DistinguishedName) URI 统一资源标识符(UniversalResource Identifie
10、r) XML 可扩展置标语言(ExtensibleMarkup Language) XSL 可扩展样式表语言(ExtensibleStylesheet Language) XSLT XSL变换(ExtensibleStylesheet Language Transformations) 4 XML签名概述4. 1 概述本章描述了XML数字签名结构,第5章给出处理规则、第6章核心签名语法和第7章附加元素签名语法。XML签名可以通过间接方式作用于任意数据对象,处理的步骤是先对数据对象进行摘要,处理后的结果放置在一个元素中,再把得到的元素再进行摘要处理并且通过密码学方法进行签名。XML数字签名使用S
11、ignature元素来表示,其结构如下(?代表出现0次或1次;+代表出现1次或多次川代表0次、1次或多次): 2 (Signature工D?(Signedlnfo (CanonicalizationMethodj (SignatureMethodj ( Reference URI? GB/T 25061-2010 (Transforms)? (DigestMethod) (DigestValue) (/Reference) + (/SignedInfo) (SignatureValue) ( KeyInfo) )? (Qbject工D?)祷( /Signature) 签名是通过URI关联数据对
12、象的。XML文档内部,签名是通过XML片段标识符关联本地的数据的,本地数据可以包含在封内签名中,也可以包含在封皮签名中。分离签名作用于外部网络资源或者作用于以兄弟元素形式出现的同一个XML文档中的本地数据对象,因此这种签名既不是封内签名也不是封皮签名。一个XML文档中签名元素(以及它的ID和属性值和名字)可以与其他元素同时存在,也可以和其他元素结合在一起,命名时应注意避免违反XML标识唯一性。本标准附录D列举了各种签名的实例,供实现本标准时参考。4.2 特别说明本标准有两个规范性附录,附录AXML数字签名文档类型定义,附录BXML数字签名模式定义。在应用本标准时,应将附录A和附录B的文件存放到
13、应用可以访问的位置,例如本标准中假定存放在http:/127. O. O. 1/2001/XMLSchema. dtd和http:/127.O. O. 1/2000/09/xmldsig中,可根据实际情况调整存放位置。5 处理规则本章规定签名生成和核心确认中所用到的操作。5. 1 核心生成5. 1. 1 概述规定核心部分生成的步骤,包括Reference元素的生成和Signedlnfo元素中的签名值的生成。5. 1.2 Reference生成对于每个要签名的数据对象,Reference元素生成的步骤如下:a) 根据应用程序的要求,对数据对象进行变换;b) 计算变换后的数据对象的摘要值;c) 创
14、建一个Reference元素,包括一个可选的数据对象的标识,可选的变换元素,摘要算法和摘要值。5. 1. 3 Signature生成Signature元素生成的步骤如下:a) 以SignatureMethod指定的签名算法、CanonicalizationMethod指定的规范化算法和引用生成的Reference为内容,创建Signedlnfo元素;b) 用Singedlnfo中指定的规范化算法来规范化,并用Signedlnfo指定的签名算法来计算Signedlnfo的签名值;c) 构建包括Signedlnfo、Object、Keylnfo和SignatureValue的Signature元素
15、。5.2 核心确认5.2. 1 概述核心确认应包括:a) 引用确认,验证Signedlnfo中每个Reference包含的摘要;b) 签名确认,使用密码方法对计算Signedlnfo得到的签名进行签名确认。3 GB/T 25061一20105.2.2 引用确认引用确认的步骤如下:a) 根据Signedlnfo中CanonicalizationMethod指定的规范化方法来规范化Signedlnfo元素;b) 对于Signedlnfo中的每个Reference:1) 获得进行摘要处理的数据对象;2) 使用Reference中指定的摘要算法对结果数据对象计算出摘要值;3) 比较上一步生成的摘要值和
16、Signedlnfo中的DigestV al ue元素的内容,如果有不同,那么确认失败。注:Signedlnfo在第一步里面进行了规范化,应用程序应确保CanonicalizationMethod不会产生错误。5.2.3 签名确认签名确认的步骤如下:a) 从Keylnfo或者其他方式获得密钥信息;b) 使用Ca盯n1旧On1丑lC臼a址liz臼zationMethod来获得S缸19n川u盯r巳M巳创tho旧od的规范化形式,然后用得出的结果和上面得到的密钥信息来与Signedlnfo元素上的签名值比较。6 核心签名语法6. 1 概述本章规定核心签名元素的详细语法,若无特别声明,应支持本章所涉及
17、到的元素。签名语法通过文档类型定义和XML模式定义来定义,所有的文档类型定义和XML模式定义使用下面的XML前同步码、声明和内部实体。模式定义:(?皿1version = 1.0 enc口ding=GB 13000?) 注:上一行为XML声明,该行中的(?xml是一个整体,表示是XML文件的开始,而本标准4.1中定义的?表示的是元素的个数,请注意区分。( ! DOCTYPE sche皿aPUBLIC -/ /旧C/DTD皿Schema200102/四飞ttp:/127.0.0.1/2001/XMLSch四.dtd( ! AITL工STschema 皿lns:dsAT且#FlXED http:/
18、127 . O. O. 1/2000/09/xmldsig# ) (! ENT工TYdsig http:/127 . O. 0.1/2000/09/xmldsig# ) (! ENTITY屯p) (! ENTITY屯s) J) (schema xmlns =飞ttp:/127.0.0.1/2001/XMLSch四axmlns :ds = http:/127 . O. 0.1/2000/09/皿ldsig# targetNamespace = http:/127 . O. O. 1/2000/09/xmldsig# version = 0.1 elementFormDefault = quali
19、fied) 文档类型定义:( ! ENTITY % Object. ANY) (! ENTITY屯Method.ANY ) (! ENT工TY% (Transform). ANY ) ( ! ENTITY % SignatureProperty. ANY ) (! ENT工TY屯Key工nfo.ANY ) (! ENT工TY屯KeyValue.ANY ) (! ENTITY屯X509Data.且NY) 6. 1. 1 ds: CryptoBinary简单类型本标准定义了ds: CryptoBinary简单类型,把XML中的任意长度的整数当作宇节字符串。具体方4 GB/T 25061-2010
20、法是先把整数值转化成高位在前格式的位串,在位串前面补0使得位的个数是8的整数倍,去掉开头为零宇节(连续8个0的位串),然后对这个字节串进行base64编码。base64Binary与CryptoBinary类型相同,定义一个新的类型主要是兼容不同的使用习惯。模式定义:(simpleType na皿e= CryptoBinary) (restriction base = base64Binary) (/ restriction) (/ simpleType) 6.2 Signature元素Signature元素是XML签名的根元素,Signature元素的组织应遵循下面说明的模式。模式定义z(e
21、l四entna皿e= Signature type= ds:SignatureType/) (complexType n缸ne= SignatureType) (sequence) (element ref =飞s:SignedInfo/)(element ref =飞s:SignatureValue/)(element ref = ds:KeyInfo minOccurs = 0/) (element ref = ds:Object minOccurs = 0 maxOccurs = 田由ounded/)(/s呵uence)(attribute name = 工dtype = ID use
22、= optional /) (/compl四Type)文档类型定义:(! ELE皿NTSignature CSignedInfo, SignatureValue, KeyInfo? , Object祷) ( !且.TTL工STSignature xmlns且TA# FIXED http:/127 .0.0. 1/2000/09/xmldsig # Id ID # IMPLIED ) 6.3 SignatureValue元素Signature Value元素包含了数字签名的具体值,通常使用base64对它进行编码。当给出两个SignatureMethod算法时,一个是应实现的,另一个是可选实现的
23、,用户可以使用自己定义的算法。模式定义:(el阻四tname = SignatureValue type = ds: SignatureValueType /) (complexType n皿e= SignatureValueType) (simpleContent) (extension base = base64Binary) (attribute name= Id type= ID use= optional/) (/ext四sion)(/simpleContent) (/complex可pe)文档类型定义:(! ELE阻NTSignatureValue C # pATA) ) ( !且
24、.TTLISTSignatureValue Id ID # IMPLIED) 6. 4 SignedInfo元素6.4. 1 概述Signedlnfo元素结构包括规范化算法,签名算法和一个或者多个引用。Signedlnfo元素可以包含一个可选的ID属性,供其他签名或者对象来引用。Signedlnfo不包括显式的签名或者摘要属性(例如处理时间,加密设备序列号等),如果应用程序需要给签名和摘要关联上属性信息,可在Object元素内加上SignatureProperties元素。模式定义z(el阻四tna皿e= SignedInfo type = ds:SignedInfoType/) 5 GB/T
25、 25061-2010 (complexType n缸ne= SignedInfoType) (sequence) (element ref = ds: CanonicalizationMethod /) (element ref = ds: SignatureMethod /) (element ref = ds: Reference maxOccurs = unbounded /) (/s呵l1ence)(attribute name = Id type = ID use =飞ptional/)(attribute name= Algorithm type=四豆R工use = requir
26、ed /) 文档类型定义:(! ELEMENT Dige5tMethod (# PCDATA屯Method.ANY;)祷( ! ATTLIST Dige5tMethod Algorithm CDATA # REQUIRED 6.4.4. 7 DigestVallle元素Digest V al ue元素包含了摘要值编码后的结果,摘要值应使用base64进行编码。模式定义:(element name = Dige5tValue type = d5: Dige5tValueType / ( 5i皿pleTypena皿e= Dige5tValueType (re5triction ba5e = a5e
27、64Bina巧/文档类型定义:(! E阻阻盯Dige5tTalu巴(# PCDATA) ( ,一ba5e64encded die5t value - 6.5 Keylnfo元素6.5. 1 概述Keylnfo是接收者获取确认签名所需密钥材料的可选元素。Keylnfo可包括的信息有:密钥、名字、整数和其他公开密钥管理信息。本标准定义了一些简单类型,应用程序可以扩展这些类型,也可以用XML名字空间功能定义自己的密钥标识和交换语义来替换它们。但密钥信息的可信问题(例如,它的真实性或强度)不在本标准讨论范围之内,而应该由应用程序来处理。接收者能从应用程序的上下文关系中获取验证签名的密钥时可忽略KeyI
28、r巾元素,Keylnfo中的多个声明指向的是同一个密钥,应用应实现KeyValue,但不一定实现RetrievalMethod。应用程序也可通过引人不同名字空间的元素来定义和使用自己选择的任意机制。忽略扩展元素安全时,本标准支持类型扩展,否则外部元素(包括本文档中定义的元素的替代结构)应为Keylnfo的子元素。Keylnfo的子元素的模式和文档类型定义规范(例如X509Data)允许使用来自于其他名字空间的元素来扩展和补充它们的内容。下面列出了名字空间中己分配标识符的Keylnfo类型,可以在RetrievalMethod类型属性中使用它们来描述一个远程的Keylnfo结构。 http:/1
29、27. O. O.1/2000/09/xmldsig :j:j: RSAKeyValue http:/127. O. O. 1/2000/09/xmldsig:j:j: X509Data 除了上面用XML结构定义的这些类型,本标准定义了一个类型来表示二进制的GB/T16264. 8 中定义的数字证书(又称X509证书10 http:/127. O. O. 1/2000/09/xmldsig:j:j: rawX509Certificate 模式定义z(ele皿entname= KeyInfo type= d5:KeyInfoType/ (compl阻:Typename = Key工nfoType
30、皿ixed=飞rue)(choice皿妇cOccur5=山lounded)(element ref =飞5:KeyN四e/)(element ref = d5:KeyValue/) (element ref = d5:RetrievalMethod/) (ele皿entref = d5: X5 09Data/) 血yproce55Content5 = 1缸n四e5pace= # # other /) ( !一口,1)element5 from (0,山由ounded)name5pace5一(/choice) (attribute n四e=飞dtype =工Du5e =飞ptional/)(/c
31、omplexType) 文档类型定义:( ! E皿阻盯Keylnfo(拌PCDATAIKeyNamelKeyValuelRetrievalMethodlX509Data % Keylnfo. ANY;)祷( ! ATL工STKey工nfoId ID # IMPLIED ) 6. 5. 2 KeyName元素GB/T 25061-2010 KeyName元素应包含一个字符串(其中的空格是不能忽略的),签名者可以用它和接收者之间传递密钥标识符。KeyName应包含用来签名的密钥对相关的标识符,也可包括其他与协议相关的间接的标识密钥对的信息。模式定义:(el阻四tname = KeyN皿etype
32、= string /) 文档类型定义:(! EI且阻NTKeyNa皿e(# PCDATA) ) 6. 5. 3 KeyValue元素6.5.3.1 概述KeyValue应包含唯一有效确认签名的公钥,KeyValue元素可包括外部定义的公开密钥的值,它们以PCDATA或外部名字空间的元素类型来表示。在附录C中给出了RSA公开密钥的结构化格式的实例。模式定义:(el阻四tname= KeyValue type= ds:KeyValueType/) (complexType name = KeyValueType mixed = true) (choice) (element ref = ds: R
33、SAKeyValue /) 田ynamespace = # # other pressContents = lax /) (/choice) (/compl四Type)文档类型定义:( !皿且阻配KeyValue(# PATAI RSAKeyValue屯KeyValue.ANY;)棒6.5.3.2 RSAKeyValue元素标识符:Type = http:/127 . O. o. 1/2000/09/xm1dsig# RSAKeyValue (可用在RetrievalMethod或者Reference元素中用来表示类型)RSA密钥值有两个域:模和指数( RSAKeyValue) (Modulu
34、s) xA7SEU + eOyQH5rm9kbCDN903aPlo7出P7tX6WOocLZAtNfyxSZDU16ksL佣jubafOqNEpcwR3RdFsT7bCqnXPBe5ELh5u4回到9Mz此XRgrMvavzyBpVRgBUwUIV5 foK5 hhmbktQhyNdy/6LpQRhDUDsTvK + g9Ucj47es9AQJ3U = (/Modu1us) 恼。on四t)AQAB(/Exponent)(/RSAKeyVa1ue) 任意长度的整数应遵循ds: CryptoBinary的定义,用XML表示为宇节串。模式定义:(el回回tname = RSAKeyVal ue ty
35、pe = ds: RS皿eyValueType/)(complexType na皿e=RSAKeyValueType) (sequence) (element n四e= Modul us type = ds: CryptoBinary /) (element n四e= Exponent type = ds: CryptoBinary /) (/s呵uence)(/compl四Type)11 GB/T 25061-2010 文档类型定义:6.5.4 RetrievalMethod元素RetrievalMethod元素为Keylnfo内用来传递存储在另一个位置的Keylnfo信息。例如,一个文档内
36、的几个签名使用一个内部或者外部的X509v3证书链来验证签名,每个签名的Keylnfo都可以用一个RetrievalMethod元素来引用证书链,而无须每次都使用X509Certificate元素的完整证书链。除了没有DigestMethod或DigestValue子元素,RetrievalMethod使用与Reference的URI属性和Reference处理模型同样的语法和解析引用的行为,且应包含URI。Type是表示要检索的数据类型的可选标识符。本标准规定了具有相应XML结构的Keylnfo类型,解析一个RetrievalMethod的Reference的结果是一个XML元素或者是以此元
37、素为根的文挡。Keylnfo的rawX509Certificate类型(不包含XML结构)返回一个二进制X509证书。模式定义:(! ENTITY屯sequencel.ttrs) (! ENTITY屯anyAtt四)(! ENT工TY% anyAttriblteAttrs ) ( ! ENTITY % attributeAt t:rs ) (! ENTITY屯attributeGroupAttrs) (! ENT工TY% uniqueAttrs) (! ENTITY屯keyAttrs) (! ENT工TY% keyrefAttrs ) (! ENTITY屯selector且ttrs) ( !
38、ENTITY % fieldAttrs ) (! ENT工TY% includeAttrs) (! ENTITY屯importAttrs) (! ENT工TY屯redefineAttrs ) (! ENTITY 旨notationAttrs) ENT工TYs旨annotationAttr臼) E盯工TY屯appinfoAttrs.) ( ! ENTITY % documentationAtrs ( ! ENTITY % complexDerivationSet 由且tA)( !一#all or space-separated J.ist drawn frum derivationChoice一
39、(! ENTITY屯blockSetCDATA) ( !一#all or space-separated list drawn from derivationChoice + substitution一(! ENTITY屯皿gs屯all;I屯choice;I屯sequence;, ) (! E阳工TY屯cs告choice;I屯sequence;) ( !因TITY屯formValues(qualifiedlunqualified) ( !因TITY告attrDecls(屯attribute;I屯attributeGroup;)* ,问any且ttribute;)?) (! E阳ITY屯part
40、icleAndAttrs(屯皿gs;I 屯group;汁,屯attrDecls;) ( !一Thisis used in part2一(! ENTITY屯restrictionl(屯皿gs;I 屯group;)竹,) 18 1民告xs-datatypes;( ! - the duplication below is to produce an unambi守llOllScontent rnodel which allows annotation everywhere一( ! E皿血NT屯scherna;(屯include;I屯皿port;I屯redefine;I屯annotation;)祷,(
41、 !且TTLIST屯scherna;targetNamespace verson (屯sirnpleType; I屯cornplexType;|屯elernent;I屯attribute;|屯attributeGroup;I屯group;|屯notation;), (屯annotation;)祷)铃) % URref; CD且TA# IMPLIED 拌IMPLIEDGB/T 25061-2010 % nds; 屯URlref,CDATA 拌FlXEDhttp:/127 O.O.1/2001/XMLSchema xrnlns finalDefault blockDefault id 母crnpl
42、exDerivationSet; % blockSet; lD elernentFormDef且ult% forrnValues; attributeForrnDefault % forrnValues; xrnl:lang CDATA 理5sche皿aAttrs;)# IMPLIED 1丰IMPLIEDunqualified unqualified # IMPLIED ( ! - Note the xrnlns declaration is Nr in the Scherna for Schernas , because at the Infoset level where schernas
43、 operate, xrnlns( :prefix) is NOT an attribute!一( ! - The declaration of xrnlns is a convenience for schema authors 一( !一Theid attribute here and below工sfor use in external references frorn non-sch四asus扛19si皿plefragrnent identifiers. It is NOT U$甜frscherna-to-scherna reference, internal or external.
44、一(! - a type is a named content type specification which allows attribute declarations-) ( !一一( !匹.El但NT屯co皿plexType;(屯田notation;)? , (% sitnplontent; I屯cornplexContent;1屯particleAndAttrs;)( !且.TTLIST% co皿plexType;na皿e屯NCName;id ID ahstract % boolean; final % co皿plexDerivationSet;blk % cornplexDeriv
45、ationSet; rnixed (true I false) false % co皿plexTypeAttrs;) ( !一particleAndAttrsis shorthand for a root type一# IMPLJl:D # IMPLIED # IMPLIED # IMPLIED #工MPLIED( ! - mixed is disallowed if si皿pleContent,overriden if cornplexContent has one too.一(! -If缸lyAttributeappears in one or rnore referenced attri
46、buteGroups 皿d/orexplicitly, the intersection of the permissions is used一19 GB/T 25061-2010 ( ! E皿MENT屯complexContent;(屯annotation;)?,(屯restriction;I屯extension;)(! ATTL工ST% complexContent; mixed (true I false)骂IMPLIEDid ID # IMPLIED 屯complexC口ntentAttrs;) (! - restriction should use the branch defined above, not the simple one fr口mpart2; extension should use the full model一(! ELEMENT屯simpleContent;(屯annotation;)?,(屯restriction;I屯extension;)( !且TTLIST屯simpleContent;id ID # IMPLIED % si皿pleContentAttrs;)( ! - restriction should use the si皿plebr四chf rom part2 , not the one def扛ledabove; extensio