<xs:element>
mogą zostać uznane na najwyższym poziomie (poniżej xs:schema
), ale nie może mieć wartości minOccurs
ani maxOccurs
, ponieważ nie ma to sensu bez kontekstu. Jeśli jest to root, może mieć tylko jeden element, a jeśli nie, to informacja odnosi się do kontekstu elementu nadrzędnego. To jest legalne:
<xs:schema ...>
<xs:element name="parameters">...</xs:element>
...
</xs:schema>
ale to nie jest:
<xs:schema ...>
<xs:element name="parameters" maxOccurs="1" minOccurs="0">...</xs:element>
...
</xs:schema>
Można odnoszą na najwyższym poziomie xs:element
obrębie grupy, takie jak xs:sequence
. Tutaj możesz można użyć tych atrybutów, ponieważ teraz masz kontekst (ile jest dozwolone w tej grupie). To jest legalne:
<xs:schema ...>
<xs:element name="parent">
<xs:complexType>
<xs:sequence>
<xs:element ref="parameters" maxOccurs="1" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="parameters">
<xs:complexType>
<xs:all>
<xs:element ref="p" minOccurs="0"/>
</xs:all>
</xs:complexType>
</xs:element>
...
</xs:schema>
Tutaj <parent>
jest kontekst, w którym występuje <parameters>
, więc można powiedzieć, ile razy to wolno tam. Definicja <parameters>
jest globalna i używasz atrybutu ref
, aby się z nim zapoznać.
Jeśli nigdy nie trzeba ponownie użyć parameters
lub jeśli nigdy nie będziemy mieć parameters
jako root, nie trzeba go na najwyższym poziomie i można zagnieździć go wewnątrz definicji parent
. W takim przypadku możesz użyć atrybutu name
z minOccurs
i maxOccurs
.
<xs:schema ...>
<xs:element name="parent">
<xs:complexType>
<xs:sequence>
<xs:element name="parameters" maxOccurs="1" minOccurs="0" />
<xs:complexType>
<xs:all>
<xs:element ref="p" minOccurs="0"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
...
</xs:schema>
Można również odwołać się do najwyższego poziomu typu. Częściej jest używać ponownie, rozszerzać i ograniczać typy, więc jest to również prawidłowy (i zalecany) sposób definiowania twojego elementu:
<xs:schema ...>
<xs:element name="parent">
<xs:complexType>
<xs:sequence>
<xs:element name="parameters" type="ParameterType" maxOccurs="1" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="ParameterType">
<xs:all>
<xs:element ref="p" minOccurs="0"/>
</xs:all>
</xs:complexType>
...
</xs:schema>
To nie jest twój pełny schemat. Kontekst jest ważny w przypadku 'minOccurs' i' maxOccurs'. Są powiązane z grupą. W jakim kontekście zdefiniowany jest twój "xs: element"? Możesz zadeklarować elementy 'top-level', ale nie mogą one mieć maxOccurs lub minOccurs, ponieważ nie są w kontekście. Edytuj swoje pytanie i wklej pełny kontekst (z katalogu głównego twojego schematu). – helderdarocha
Również 'p?' Jest nieprawidłowe jako wartość 'ref'. Jeśli masz na myśli * jeden lub żaden * możesz użyć ' ' (możesz pominąć 'maxOccurs =" 1 "' ponieważ jest domyślne) –
helderdarocha
Należy pamiętać, że każdy dokument XML może mieć "dokładnie jeden pojedynczy element główny", dlatego zasadniczo nie można podać wartości max i min dla roota - jest to domniemane maksimum + maksimum 1, więc nawet nie pozwala określić dowolne. – rogerdpack