Не могу разработать схему xsd - из-за имени элемента переменной - PullRequest
2 голосов
/ 19 марта 2010

Я не лучший в создании схемы XSD, так как на самом деле это моя первая, я хотел бы проверить XML, который должен выглядеть следующим образом:

<?xml version="1.0"?>
<Data>
  <FIELD name='toto'>
    <META mono='false' dynamic='false'>
      <COLUMN1>
          <REFTABLE>table</REFTABLE>
          <REFCOLUMN>key_column</REFCOLUMN>
          <REFLABELCOLUMN>test_column</REFLABELCOLUMN>
      </COLUMN1>
      <COLUMN2>
          <REFTABLE>table</REFTABLE>
          <REFCOLUMN>key_column</REFCOLUMN>
          <REFLABELCOLUMN>test_column</REFLABELCOLUMN>
      </COLUMN2>
</META>
<VALUEs>
   <VALUE>...</VALUE>
</VALUEs>
</FIELD>

Моя проблема в том, что в блоке META теги "COLUMN1", "COLUMN2" всегда разные, они могут стать COLUMNxxx. На данный момент моя схема:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Data">
    <xsd:complexType>
   <xsd:sequence>
     <xsd:element name="FIELD" type="Field" />
    </xsd:sequence>
      <xsd:attribute name="id" type="xsd:int" use="required" />
    </xsd:complexType>
</xsd:element>

<xsd:complexType name="dataSourceDef">
    <xsd:sequence>
        <xsd:element name="DSD_REFTABLE" type="xsd:string" />
        <xsd:element name="DSD_REFCOLUMN" type="xsd:string" />
        <xsd:element name="DSD_REFLABELCOLUMN" type="xsd:string" />
    </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="MetaTag">
    <xsd:sequence>
        <xsd:any processContents="lax" />
    </xsd:sequence>
    <xsd:attribute name="mono" type="xsd:string" use="required" />
    <xsd:attribute name="dynamic" type="xsd:string" use="required"/>
</xsd:complexType>

<xsd:complexType name="Field">
    <xsd:sequence>
        <xsd:element name="META" type="MetaTag" minOccurs="1" />
        <xsd:element name="VALUEs">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:any processContents="lax" />
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    </xsd:sequence>
    <xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:schema>

И я просто не могу заставить его работать, я не знаю, как справиться с тем фактом, что точный уровень моих узлов не ясен, а остальное есть.

Не могли бы вы помочь мне, пожалуйста?

Ответы [ 2 ]

3 голосов
/ 19 марта 2010

Вы не можете иметь такой документ и проверять его по XML-схеме. Используйте

<COLUMN name="Column1"/>

вместо.

1 голос
/ 19 марта 2010

Думаю, проблема в том, что в вашей схеме <xsd:any/> будет принимать только один элемент. Вы должны сказать, что может быть любое количество детей с атрибутами minOccurs и maxOccurs :

<xsd:sequence>
    <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...