ComplexType模型

时间:2013-09-29 12:10:36

标签: xml model xsd complextype

我是XML Schema的新手,我正在尝试降低基础知识。 这是ComplexType的模型。我不明白,我怎么能阅读内容部分。问题是,ComplexType包含的元素是什么。

<complexType
  abstract = Boolean : false 
  block = (#all | List of (extension | restriction))
  final = (#all | List of (extension | restriction))
  id = ID 
  mixed = Boolean : false
  name = NCName 
  {any attributes with non-schema Namespace...}>
Content: (annotation?, (simpleContent | complexContent | ((group | all | 
choice | sequence)?, ((attribute | attributeGroup)*, anyAttribute?))))
</complexType>

complexType

中的模型语法中的以下符号或运算符ar
?            = ( one or no of this element) 
*            = ( several or no of this element) 
no operator  = (  does mean one of this element) 
|            = ( is this e OR ? )

我尝试了以下组合, 有可能:

annotation, simpleContent
simpleContent
annotation, complexContent
complexContent

在以下组合中,我们是否可以放置而不是顺序 这个elemens,groupe,all,choice(我忽略了anyAttribut元素)

annotation,sequence,attributeA,attributeB,attributeGroupeA
sequence,attributeA,attributeB,attributeGroupeA
attributeA,attributeB,attributeGroupeA
attributeA
attributeGroupeA

正如我们所看到的那样,有可能有这个组合,attributeA,attributeB,attributeGroupeA,这是我在wiche中的概念中的一点我不 在模型中理解语法。

((attribute | attributeGroup)*, anyAttribute?))

因为|符号不应该具有以下组合

attributeA,attributeB,attributeGroupeA

我读错了什么?

(attribute | attributeGroup)*

这个语法对我来说意味着什么。我有以下组合的可能性

attributeA,attributeB
attribute
attributeGroupeA,attriubteGroupeB
attributeGroupeA

1 个答案:

答案 0 :(得分:0)

(attribute | attributeGroup)视为允许attributeattributeGroup

(attribute | attributeGroup)*视为允许attributeattributeGroup中的零个或多个。每当您返回可能出现的attributeattributeGroup时,您可以再次选择其中之一。因此,此构造允许以任意顺序的零个或多个attributeattributeGroup 的任意序列。

因此,在完整的XML Schema术语中,BNF对Type支持以下complexType定义:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           version="1.0">

  <xs:attributeGroup name="AttributeGroupXY1">
    <xs:attribute name="attributeX1"/>
    <xs:attribute name="attributeY1"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="AttributeGroupXY2">
    <xs:attribute name="attributeX2"/>
    <xs:attribute name="attributeY2"/>
  </xs:attributeGroup>

  <xs:complexType name="Type">
    <xs:attribute name="attributeA"/>
    <xs:attribute name="attributeB"/>
    <xs:attributeGroup ref="AttributeGroupXY1"/>
    <xs:attribute name="attributeC"/>
    <xs:attributeGroup ref="AttributeGroupXY2"/>
  </xs:complexType>

</xs:schema>