2013-04-29 2 views
0

Я новичок в xml, и я пытаюсь понять элемент xsd: all. Как MSDN говорит:Правильный способ определения элементов с помощью xsd: all

XSD: Все это позволяет элементы в группе появляются (или не появляются) в любом порядке, в содержащем его элементе.

Итак, как я понимаю, если мы делаем простой пример схемы XSD:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" > 
    <xsd:element name = "MyElem"> 
    <xsd:complexType> 
      <xsd:all> 
      <xsd:element name = "name" type = "xsd:string" /> 
      <xsd:element name = "lastname" type = "xsd:string" /> 
      <xsd:element name = "city" type = "xsd:string" /> 
      </xsd:all> 
    </xsd:complexType> 
    </xsd:element> 
    </xsd:schema> 

тогда мы можем иметь файл XML так:

<MyElem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Example.xsd" > 
    <name>"some_name"</name> 
    <lastname>"some_last_name"</lastname> 
    <city>"somecity"</city>   
</MyElem> 

Это довольно ясно. Но когда я пытаюсь не дать MyElem никаких элементов, так как упоминается в определении (позволяет элементы появляются или не появляются), я получаю сообщение об ошибке в XML-файл, в котором говорится:

следующие элементы, как ожидается, в этом месте.

Я использую редактор Altova xmlSpy xml.

Я правильно понял, что элементы могут появляться или не появляться в содержащем элементе?

Благодарим за помощь.

ответ

1

Если вы хотите, чтобы некоторые элементы были дополнительными, дайте им minOccurs="0". Чтобы указать, что имя, фамилия и город могут все происходить в любом порядке, город не является обязательным:

<xsd:all> 
    <xsd:element name = "name" type = "xsd:string" /> 
    <xsd:element name = "lastname" type = "xsd:string" /> 
    <xsd:element name = "city" type = "xsd:string" minOccurs="0"/> 
</xsd:all>