Написание .xsd для элементов с атрибутами - PullRequest
1 голос
/ 07 ноября 2011

Я в настоящее время знакомлюсь с xsd и xml просто для удовольствия, и я не уверен, что делаю не так. Я хотел бы написать xsd для простой (ну не совсем, поскольку она имеет атрибуты) таблицы со строками и столбцами и использовать XML-сопоставление в Excel для удобного отображения данных. Строки для строк и столбцы для столбцов, как в таблицах, которые обычно можно увидеть. например,

<?xml version='1.0'?>
<table name='Data1'>
<row>
<col name='id'>1</col>
<col name='x'>0</col>
<col name='y'>6</col>
<col name='z'>7</col></row>
<row>
<col name='id'>2</col>
<col name='x'>0</col>
<col name='y'>5</col>
<col name='z'>8</col></row>
<row>
<col name='id'>3</col>
<col name='x'>0</col>
<col name='y'>5</col>
<col name='z'>9</col></row></table>

По сути, это должно выглядеть примерно так:

  • id | х | у | z
  • 1 | 0 | 6 | 7
  • 2 | 0 | 5 | 8
  • 3 | 0 | 5 | 9

Отредактированная схема:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="table">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="row" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="col" minOccurs="0" maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:simpleContent>
                                    <xs:extension base="xs:string">
                                            <xs:attribute name="name" type="xs:string"/>
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
            <xs:attribute name="name" type="xs:string"/>
        </xs:complexType>
    </xs:element>
</xs:schema> 

Я добавил какой-то дополнительный ингредиент или что-то упустил? Я не совсем ясно об этой вещи XSD еще. XD

Заранее спасибо всем, кто мог указать на мою ошибку (и).

1 Ответ

0 голосов
/ 08 ноября 2011

XML не проверен схемой - объявление элемента столбца не завершено. Попробуйте это:

<xs:element name='table'>
    <xs:complexType>
        <xs:sequence>
            <xs:element name='row'>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name='col' minOccurs="0" maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:simpleContent>
                                    <xs:extension base="xs:string">
                                        <xs:attribute name="name" type="xs:string">
                                        </xs:attribute>
                                    </xs:extension>
                                </xs:simpleContent>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name='name' type='xs:string'/>
    </xs:complexType>
</xs:element>
...