9.5 元素声明
每个模式元素声明映射到EClass中的EAttribute或者EReference,该EClass对应于包含该元素的复杂类型定义;如果属性是全局的,则对应于"DocumentRoot" EClass中的EAttribute或者EReference。
如果其类型简单,元素声明将映射到EAttribute(除了第9.3.5节介绍的特殊情况之外)。或者,如果类型是复杂的,它则映射到EReference。无论是哪种情况,都像下面这样初始化特性的属性:
name =转换为(如有必要)合适Java字段名称的元素的name
eType =对应于元素类型的EDataType或者EClass
lowerBound =元素声明的minOccurs值乘以任何包含模型组的minOccurs,或者对于全局元素或者嵌套在xsd: choice中的元素而言为0
upperBound =元素声明的maxOccurs值乘以任何包含模型组的maxOccurs,或者对于全局元素而言为-2(未指定),参见第9.5.7节
eAnnotations =扩展的元数据EAnnotation
如果元素的类型是预定义的模式类型之一,则将对应EAttribute的eType设置为对应的从XMLType模型创建的EDataType(参见第9.9节)。如果元素有用户定义的简单类型,则将eType设置为从简单类型创建的EDataType,如第9.2节所述。
否则,如果元素声明映射到EReference,eType则被设置为对应于元素的类型的EClass。EReference的containment属性为true,在9.5.3一节描述的情况中除外。
扩展的元数据EAnnotation的details映射包含下列项:
key = "name",value =未被改变的该元素的namekey="kind",value="element"
type="xsd:string"
maxOccurs="unbounded"/>EAttribute
name="mySimple"
eType=".../XMLType#//String"
lowerBound=1
upperBound=-1 (unbounded)
EAnnotation
source=".../ExtendedMetaData"
details="name""mySimple",
"kind" "element"
...
EReference
name="myComplex"
eType="//MyComplexType"
lowerBound=1
upperBound=1
containment=true
EAnnotation
source=".../ExtendedMetaData"
details="name""myComplex",
"kind" "element"
9.5.1 AnyType元素
除了所有XML Schema预定义的简单类型的EDataTypes之外(参见第9.9节),XMLType模型还包含一个名为AnyType的EClass,它对应于xsd:anyType复杂类型。xsd:anyType的元素映射到EReference,但不是这种类型的。相反,EReference的eType是EObject,它是所有EMF对象的基类。
type="xsd:anyType"/>EReference
eType=".../Ecore#//EObject"
...使用EObject作为引用的类型,就允许它使用任何EMF对象的实例作为它的值,这是预期行为。"AnyType" EClass的目的是处理实例包含任意XML内容的情况。例如,当处理没有元数据可用的lax模式中的通配符内容时,"AnyType" EClass的实例(与其他EClass相同,它显式扩展EObject)将被用作该特性的值。这种实例可以表示任意XML元素内容,包括它可能拥有的任何属性和混合文本。
【责任编辑:云霞 TEL:(010)68476606】
点赞 0