LINUX.ORG.RU

помощь в написании XSD


0

0

пишу первый раз XSD:)

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

   <download_file_list>
     <item type='File'>
       <attribute name='FileDescription' value='Cool Game' />
       <attribute name='Url' value='http://freeciv.org/' />

сейчас для этого пишу специальные типы:

  <xs:simpleType name="downloadable_type">
    <xs:restriction base="xs:string">
      <xs:enumeration value="File" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="file_attr_name_description">
    <xs:restriction base="xs:string">
      <xs:enumeration value="FileDescription" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="file_attr_name_url">
    <xs:restriction base="xs:string">
      <xs:enumeration value="URL" />
    </xs:restriction>

и потом их использую:

  <xs:element name="download_file_list">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="item">
          <xs:complexType>
            <xs:sequence>
              <xs:element minOccurs="1" maxOccurs="1" name="attribute">
                <xs:complexType>
                  <xs:attribute name="name" type="file_attr_name_description"/>
                  <xs:attribute name="value" type="xs:string"/>
                </xs:complexType>
              </xs:element>
              <xs:element minOccurs="1" maxOccurs="1" name="attribute">
                <xs:complexType>
                  <xs:attribute name="name" type="file_attr_name_url"/>
                  <xs:attribute name="value" type="url_type"/>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="type" use="required" type="downloadable_type"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>

Есть вопросы: можно ли как-то обойтись без создания отдельного типа
file_attr_name_description?  то есть как-то прямо написать в том
месте где нужно FileDescription.

Можно ли как-то создать тип name_value который будет матчить любой  узел вида:

       <attribute name='FileDescription' value='Cool Game' />

и ограничением этого типа получать частные случаи для FileDescription и URL.

вообще любые советы как это упростить приветствуются..
★★★★★

тэкс, на первый вопрос я нашел ответ -- вроде бы можно писать: use="required" fixed="FileDescription"

dilmah ★★★★★
() автор топика
Ответ на: комментарий от dilmah

обнаружил что xs:all мне подходит. Но какого xyz в нем MaxOccurs может только 0 или 1?? некоторые могут много раз встречаться..

dilmah ★★★★★
() автор топика
Ответ на: комментарий от dilmah

попытался всунуть xs:sequence внутрь xs:all -- не проходит. Кто эту хххуууиииню XSD вообще придумал??

dilmah ★★★★★
() автор топика
Ответ на: комментарий от dilmah

> Кто эту хххуууиииню XSD вообще придумал??

все просто. "есть проблема. обязательно: придумать описание на xml; по-возможности: разобраться в предметной области." на w3c.org уйма "стандартов", разработанных по данной методике. :)

хотя тема, конечно, интересная http://www.dcs.st-and.ac.uk/~james/RESEARCH/ydtm-submitted.pdf

Lucky ★★
()
Ответ на: комментарий от Lucky

> "есть проблема. обязательно: придумать описание на xml; по-возможности: разобраться в предметной области." на w3c.org уйма "стандартов", разработанных по данной методике. :)

я таки окончательно пришел к выводу что XSD это полное дрмо. Переключился на Скиматрон. Он и проще и гораздо мощнее. Да еще и стандартизирован ISO.

dilmah ★★★★★
() автор топика
Ответ на: комментарий от dilmah

без ложки дегтя со скиматроном не обошлось. Он использует xpath, а xpath 1.0 (он используется в xmllint/libxml2) не поддерживает матчинг регэкспов.

dilmah ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.