1

我对 XML Schema 完全陌生,并且正在尝试了解基础知识。这是 ComplexType 的模型。我不明白,我如何阅读内容部分。Questions 是 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 中的模型语法中的以下符号或运算符

?            = ( 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

在以下组合中,我们是否可以放置而不是序列,也可以放置元素、组、全部、选择(并且我忽略了 anyAttribut 元素)

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

正如我们所看到的,可以有这种组合,attributeA,attributeB,attributeGroupeA,这是我的概念中的重点,我在 Model the Syntax 中不理解。

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

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

attributeA,attributeB,attributeGroupeA

我读错了什么?

(attribute | attributeGroup)*

这种语法对我来说确实意味着。我有以下组合的可能性

attributeA,attributeB
attribute
attributeGroupeA,attriubteGroupeB
attributeGroupeA
4

1 回答 1

0

(attribute | attributeGroup)作允许attributeattributeGroup

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

因此,在完整的 XML Schema 术语中,例如,TypeBNF 支持以下定义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>
于 2013-09-29T14:35:42.100 回答