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>
Я надеюсь, что это дополнение поможет другим, кто борется с той же неясной проблемой.