2009-08-15 2 views
0

Я имею проблему строит схему для этого XML:XML-схема для записи немного сложнее

<record> 
    <field index="1">data</field> 
    <field index="2">data</field> 
    <field index="3">data</field> 
    <field index="4">data</field> 
    <field index="5">data</field> 
    <field index="6">data</field> 
    <group index="7"> 
     <member index="1">data</member> 
     <member index="2">data</member> 
    </group> 
    <field index="8">data</field> 
    <field index="9">data</field> 
    <group index="10"> 
     <member index="1">data</member> 
    </group> 
    <field index="11">data</field> 
    <field index="12">data</field> 
    <field index="13">data</field> 
    <field index="14">data</field> 
    <field index="15">data</field> 
    <field index="16">data</field> 
    <field index="17">data</field> 
</record> 

Проблема заключается в том, что я не знаю, чтобы построить схему для «полей «элементы, у меня есть много элементов с тем же именем« поле », но с разными атрибутами« index ».

Также у меня возникла проблема с построением схемы для нескольких значений внутри группы тегов.

ответ

0

Добро пожаловать, для field, вы могли бы определить что-то вдоль этих линий:

<xsd:element name="field" type="FieldType"/> 
<xsd:complexType name="FieldType> 
    <xsd:simpleContent> 
    <xsd:extension base="xsd:string"> 
     <xsd:attribute name="index" type="xsd:integer" /> 
    </xsd:extension> 
    </xsd:simpleContent> 
</xsd:complexType> 

Как для group, вы должны использовать sequence:

<xsd:element name="group" type="GroupType" /> 
<xsd:complexType name="GroupType"> 
    <xsd:sequence> 
    <xsd:element name="member" type="MemberType" minOccurs="1" maxOccurs="unbounded" /> 
    </xsd:sequence> 
    <xsd:attribute name="index" type="xsd:integer" /> 
</xsd:complexType> 

Я предположил, что вы должны иметь в не более member для каждого group. Кроме того, вы должны определить MemberType. Я пропустил его, потому что он почти идентичен указанному выше FieldType.

+0

OP вероятно также хочет подтвердить, что индексы не повторяются. Похоже, что это можно сделать с помощью xsd: unique, который я никогда не использовал (на самом деле, похоже, что xsd: unique может выполнять зависящую от контекста проверку, поэтому время, когда я начал работать с ним). См. Http://www.w3.org/TR/xmlschema-0/#specifyingUniqueness – kdgregory

0

Вы только что узнали, почему это плохой дизайн для схемы. Невозможно связать тип с индексом. У вас должны быть отдельные имена элементов с отдельными типами. Например:

<person xsi:noNamespaceSchemaLocation="Person.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <name> 
     <first>John</first> 
     <last>Saunders</last> 
    </name> 
    <dob>1967-08-13</dob> 
    <email>[email protected]</email> 
</person> 

может исходить из следующей схемы:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:element name="person"> 
     <xs:annotation> 
      <xs:documentation>A person</xs:documentation> 
     </xs:annotation> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="name"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="first" type="xs:string"/> 
          <xs:element name="last" type="xs:string"/> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
       <xs:element name="dob" type="xs:date"/> 
       <xs:element name="email"> 
        <xs:simpleType> 
         <xs:restriction base="xs:token"/> 
        </xs:simpleType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

Такого рода вещи могут ограничить отдельные элементы конкретных типов данных, и многое другое. Вы не можете ограничить тип определенных элементов, потому что все они должны поддерживать любой тип данных.

+0

Я не создал этот плохой дизайн, он поставляется вместе с системой в моем офисе, и я предполагаю создать схему для сети оказание услуг. – mmspeed

+0

Ну, вы не можете ограничить типы данных. Убедитесь, что ваши менеджеры знают, что формат данных, выбранный авторами этого XML, почти гарантирует наличие плохих данных в системе. Возможно, это в конечном итоге вернется к нужным людям, которые разработают схему, которая фактически соответствует бизнес-требованиям. –