XSD, ограничения и генерация кода - PullRequest
3 голосов
/ 01 марта 2010

Я работаю над созданием кода для существующего проекта и хочу начать с xsd. Таким образом, я могу использовать инструменты как Xsd2Code / xsd.exe для генерации кода, а также использовать xsd для проверки XML. Эта часть работает без проблем.

Я также хочу перевести некоторые ограничения в DataAnnotations (обогатить Xsd2Code). Например, xs: minInclusive / xs: maxInclusive я могу перевести в RangeAttribute.

Но что делать с пользовательскими атрибутами проверки, которые мы создали? Могу ли я добавить пользовательские аспекты / ограничения? И как? Или есть другое решение / лучшая практика.

Я хотел бы собрать все в один (xsd) файл, чтобы в одном файле содержалась структура класса (модели), включая валидацию (атрибуты), которую нужно добавить.

<xs:element name="CertainValue">
  <xs:simpleType>
    <xs:restriction base="xs:double">
      <xs:minInclusive value="1" />
      <xs:maxInclusive value="100" />
      <xs_custom:customRule attribute="value" />
    </xs:restriction>
  </xs:simpleType>
</xs:element>

1 Ответ

0 голосов
/ 25 июля 2010

Схема XML сама по себе ограничена схемой, поэтому вы не можете добавить произвольный (в ее глазах) элемент. Существует возможность добавления всего, что вам нравится, xs: annotation / xs: appinfo, которая доступна для добавления в большинство узлов. Возможно, попробуйте что-то вроде этого:

<xs:element name="CertainValue">
<xs:simpleType>
  <xs:restriction base="xs:double">
    <xs:annotation>
      <xs:appinfo>
        <xs_custom:customRule attribute="value" />       
      </xs:appinfo>
    </xs:annotation>
    <xs:minInclusive value="1" />
    <xs:maxInclusive value="100" />
  </xs:restriction>
</xs:simpleType>

Это зависит от того, где Xsd2Code ищет материал, но если они ожидают, что XSD передаются для проверки, appinfo, вероятно, является их единственным выбором. Вопрос о том, какой элемент добавить в него информацию о приложении, также вызывает вопросы.

...