2010-12-21 3 views
13

Ich versuche, ein XML-Schema zu erstellen, die XML erfassen können, die etwa wie folgt aussieht:XML-Schema für SimpleType und Attribut?

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

Aber leiten in Schwierigkeiten. Ist es überhaupt möglich, ein Schema zu definieren, um dies zu erfassen oder bin ich auf einem snipe hunt? Hier

Antwort

33

Sie gehen

<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> 

Und hier ist die validierten Probe

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

Danke, danke, danke. Ich habe mit diesem Problem für eine Weile gekämpft und es ist nicht wirklich so offensichtlich, wie man das Schema definiert, obwohl das tatsächliche XML-Beispiel ziemlich direkt ist. Mein größtes Problem war, wie man eine JAXB-Klasse strukturiert, um damit umzugehen. Erst als ich Ihre Schemadefinition sah und sie durch xjc lief, konnte ich sehen, wie ich sie in JAXB einrichten konnte. Die JAXB Java-Klassen sind ziemlich unintuitiv IMHO und ich hätte nie gedacht, wie ich es einrichten soll. Ich habe verschiedene Möglichkeiten ausprobiert, um dies ohne Erfolg zum Laufen zu bringen.

Unten finden Sie ein Beispiel für die JAXB-Java-Klasse, die aus Ihrem geposteten Schema generiert wird. Der Schlüssel wird mit der der @XmlValue Anmerkung auf dem Feld (man kann es auch auf dem Getter des Feldes verwenden, aber die XmlAccessorType Anmerkung entfernen:

@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. 

Hier ist das vermarshallten JAXB XML-Dokument aus der gegebenen Klasse:

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

ich hoffe, dass dieser Zusatz andere helfen wird, die mit dem gleichen obskuren Problem zu kämpfen hat.

Verwandte Themen