Схема XML: элемент с атрибутами, содержащий только текст?

133

Мне сложно это искать. Как мне определить элемент в файле схемы XML для XML, который выглядит следующим образом:

<option value="test">sometext</option>

Я не могу понять, как определить элемент типа, который xs:stringтакже имеет атрибут.

Вот что у меня так далеко:

<xs:element name="option">
    <xs:complexType>
        <xs:attribute name="value" type="xs:string" />
    </xs:complexType>
</xs:element>
Wilco
источник

Ответы:

168

Пытаться

  <xs:element name="option" type="AttrElement" />

  <xs:complexType name="AttrElement">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="value" type="xs:string">
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
Дэвид Норман
источник
Я получаю следующее исключение при попытке использовать ваш код - org.xml.sax.SAXParseException: src-resolve: не удается преобразовать имя AttrElement в компонент (n) «определение типа». Почему это так?
Эшвин
1
Если это так, вероятно, это связано с тем, что в вашем документе схемы есть целевое пространство имен, и вам нужно будет использовать имя с префиксом, чтобы указать на тип. (Если префикс tnsпривязан к целевому пространству имен документа схемы, вы будете использовать его type="tns:AttrElement"для ссылки на тип.)
М. Сперберг-Маккуин,
@Ashwin, возможно, вам потребуется ссылаться на тип с помощью пространства имен типа ( type="tns:AtrElement"если ваше пространство имен XSD по умолчанию - xs, а не targetNamespace документа. Обычно в этом случае tnsопределяется и используется.
eckes
75

... или встроенный эквивалент:

<xs:element name="option">
  <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="value" type="xs:string" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:element>
Джулиан Х
источник
11
Я считаю, что определение simpleContentв complexType. Но опять же, это XSD, где нет ничего интуитивно понятного. Тем не менее, спасибо! :-)
грипп
Это покажет мне ошибку в IntelliJ ( V12.1.3 ): Атрибут значения "не разрешен". Использование complexContent вместо simpleContent установил ее.
aZen
@CrBruno лучше открыть для этого специальный вопрос SO. Не стесняйтесь ссылаться на это здесь, в комментариях (и указывать на эту дискуссию)
eckes
-2

Я знаю, что это не то же самое, но у меня это работает:

<xsd:element name="option">
    <xsd:complexType mixed="true">
        <xsd:attribute name="value" use="optional" type="xsd:string"/>
    </xsd:complexType>
</xsd:element>
Aitor
источник