Ограничение или ограничение значения, используемого для атрибута xsi: type - PullRequest
3 голосов
/ 08 октября 2009

У меня есть следующий кусок XML:

<MyField>
    <FieldName>Blah</FieldName>
    <ValueFormatting xsi:type="DateFormatter">
        <Format>dd/MM/yy</Format>
    </ValueFormatting>
</MyField>

В этом XSD, как я могу ограничить или ограничить значения, предоставленные для атрибута xsi:type в элементе ValueFormatting, так как у меня есть список из четырех или пяти допустимых типов (то есть TextFormatter, NumberFormatter, DateFormatter, и др.)?

Кроме того, в моем XSD, как я могу обеспечить, чтобы имя атрибута было "xsi: type"? Правильно ли, что я мог бы избежать использования имени атрибута "type" вместо этого, но тогда я мог бы рисковать коллизией, если "type" объявлен в других пространствах имен?

Спасибо!

1 Ответ

3 голосов
/ 09 октября 2009

Чтобы ограничить допустимые значения для атрибута "type", используйте теги в определении XSD вашего атрибута "type".

Что касается самого имени атрибута, XML должен определить пространство имен (по умолчанию или иным образом), которое использует данный префикс, а затем XSD необходимо указать это же пространство имен в атрибуте "targetNamespace" атрибута "type" определение. Вы не можете принудительно заставить XML использовать префикс «xsi» (фактически, префикс «xsi» зарезервирован в любом случае), но вы можете принудительно указать, на какое пространство имен он указывает, чтобы убедиться, что XML использует ваш атрибут «type» а не чужие.

Например:

<xsd:element name="ValueFormatting">
  <xsd:complexType>
    <xsd:attribute name="type" minOccurs="1" maxOccurs="1" targetNamespace="http://...">
      <xsd:simpleType>
        <xsd:restriction base="xsd:string">
          <xsd:enumeration value="TextFormatter" />
          <xsd:enumeration value="NumberFormatter" />
          <xsd:enumeration value="DateFormatter" />
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
    ...
  </xsd:complexType>
</xsd:element> 

<MyField> 
    <FieldName>Blah</FieldName> 
    <ValueFormatting xmlns:myns="http://..." myns:type="DateFormatter"> 
        <Format>dd/MM/yy</Format> 
    </ValueFormatting> 
</MyField> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...