Вопрос схемы XML - PullRequest
       2

Вопрос схемы XML

0 голосов
/ 03 мая 2011

Можно ли определить схему XML (XSD) для правильного описания документа, такого как следующий?

<root>
    <str name="status">success</str>
    <str name="message">Your request has been processed successfuly.</str>
</root>

Проблема может заключаться в том, что теги <str> имеют атрибут (имя) кака также строковые значения.Я был бы признателен, если бы кто-нибудь смог придумать схему XML для этого фрагмента XML, так как я застрял на этом этапе.Моя лучшая попытка на данный момент показана ниже, но обратите внимание, что элемент <str> не может иметь тип (например, xsd: string) в этом контексте.

  <xs:element name="object">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="str" minOccurs="2" maxOccurs="2">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="productName" type="xs:string"/>
          </xs:sequence>
          <xs:attribute name="name" type="xs:string" use="required"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  </xs:element>

1 Ответ

1 голос
/ 03 мая 2011

Ваши ограничения не совсем ясны, поэтому ряд схем будет проверять XML в зависимости от того, насколько вы хотите, чтобы проверка была свободной. В этом примере показана схема, которая обязывает ровно два элемента внутри элемента, и они должны иметь атрибут «name» со значениями «status» или «message».

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="str" type="StrType" minOccurs="2" maxOccurs="2"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="StrType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="name" type="StrAttribute" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="StrAttribute">
    <xs:restriction base="xs:string">
      <xs:enumeration value="status"/>
      <xs:enumeration value="message"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

Конечно, это позволило бы двум элементам как с атрибутом name, установленным в «message», так и сначала с «message», затем с состоянием. Я полагаю, что схема не может определить последовательность, содержащую два элемента с одинаковыми именами, но разных типов, которые вам понадобятся, если вам потребуется проверка, чтобы убедиться, что первый всегда содержит «статус», а второй - «сообщение».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...