我是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
答案 0 :(得分:0)
将(attribute | attributeGroup)
视为允许attribute
或attributeGroup
。
将(attribute | attributeGroup)*
视为允许attribute
或attributeGroup
中的零个或多个。每当您返回可能出现的attribute
或attributeGroup
时,您可以再次选择其中之一。因此,此构造允许以任意顺序的零个或多个attribute
或attributeGroup
的任意序列。
因此,在完整的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>