XML-схема для SimpleType и атрибута?

Я пытаюсь создать XML-схему, которая может захватывать XML, который выглядит примерно так:

<tagname description="simple string type attribute">
false <!-- simple boolean type -->
</tagname>

Но я сталкиваюсь с трудностями. Можно ли даже определить схему для ее захвата или я на бегстве?

Ответы

Ответ 1

Здесь вы идете

<xs:element name="tagname">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="xs:boolean">
                    <xs:attribute name="description" type="xs:string" use="required"/>
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>

И вот проверенный образец

<tagname xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="file:/C:/Untitled2.xsd" description="123">
    true
</tagname>

Ответ 2

Спасибо, спасибо, спасибо. Я некоторое время боролся с этой проблемой, и на самом деле не так очевидно, как определить схему, хотя фактический образец XML довольно прямолинейный. Моя самая большая проблема заключалась в том, как структурировать класс JAXB для этого. Только до тех пор, пока я не увидел ваше определение схемы и не пропустил его через xjc, я смог увидеть, как настроить его в JAXB. Java-классы JAXB довольно неинтуитивные IMHO, и я бы никогда не догадался, как настроить его. Я пробовал несколько разных способов заставить это работать без каких-либо успехов.

Ниже приведен образец java-класса JAXB, который генерируется из вашей опубликованной схемы. Ключ использует аннотацию @XmlValue в поле (вы также можете использовать его на получателе поля, но удалить аннотацию XmlAccessorType:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "value" })
@XmlRootElement(name = "tagname")
public class Tagname {

  @XmlValue
  protected boolean value;
  @XmlAttribute(name = "description", required = true)
  protected String  description;

  public boolean isValue() {
    return value;
  }

  public void setValue(boolean value) {
    this.value = value;
  }

 get and set for description omitted.

Ниже представлен XML-документ JAXB из данного класса:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tagname description="The Description">true</tagname>

Я надеюсь, что это дополнение поможет другим, кто борется с той же неясной проблемой.