hoe xsd te groeperen: elementen van een xsd: samen kiezen en deze uitbesteden?

Ik werk met XSD en ik heb een xsd: keuze met veel xsd: elementen erin. Nu wil ik het een beetje vereenvoudigen en daarom heb ik de xsd: elementen gegroepeerd, zodat ik ze kan uitbesteden (en hergebruiken) in afzonderlijke xsd: elementen.

Voor:

<!-- main.xsd -->

    
        
            
            
            
            

            
            
            
            
        
    

Na:

<!-- main.xsd -->



    
       
           

           
        
    


<!-- outsourced.xsd -->

    
        
            
            
            
            
        
    



    
        
            
            
            
            
        
    

Helaas creëert dit een nieuwe klasse 'login' en 'contact' wanneer ik hier Java-bron van genereer, wat ik wil vermijden. Is er een manier om de gegroepeerde xsd: outsourcing uit te besteden om de xsd: choice te vereenvoudigen?

0

1 antwoord

Ik weet niet precies wat u zoekt, maar het moet een van de volgende zijn:

  • u wilt de naam van het gegenereerde veld vereenvoudigen, dus in plaats van n1n2n3 krijgt u iets leesbaarder; in dit geval raad ik aan om te gaan met deze oplossing hier gepresenteerd
  • Ik raad u aan Blaise's blog te lezen hier en hier - het zou je oplossing moeten helpen begrijpen of op zijn minst hoe je je vraag beter kunt formuleren.

UPDATE: Ok, wat je moet doen is om die twee groepen XSD: elementen met een XSD: reeks in te pakken en dan met het bindingsbestand te spelen om te krijgen wat je wilt (ik veronderstel dat je JAXB gebruikt).

UPDATE 2: Dus het klinkt alsof je JAXB gebruikt. Als u het onderstaande schema gebruikt, geloof ik dat het u geeft wat u zoekt, opnieuw gebruikt (door verwijzingen naar modelgroepen) en geen nieuwe klassen. Ik zal beide artefacten plaatsen, maar ik raad u aan het ook te proberen (ik heb NetBeans gebruikt) om te zien wat er aan de hand is (schrijf ook een testclient in Java die de klas gebruikt, bekijk wat een ontwikkelaar zal zien, enz.) En als het nog steeds niet is wat je wilt, gebruik dan de resultaten van je poging om je vraag nog wat meer te illustreren.

XSD:

<?xml version="1.0" encoding="utf-8" ?>

    
        
            
                
                
            
        
    

    
        
            
            
            
            
        

    

    
        
            
            
            
            
        
    

Door Java gegenereerde klasse (standaard, geen aangepaste bindingen, irrelevante inhoud verwijderd):

package sequnderchoice;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "loginId",
    "loginUsername",
    "loginPassword",
    "loginNote",
    "contactName",
    "contactAddress",
    "contactPhone",
    "contactNote"
})
@XmlRootElement(name = "account")
public class Account {

    @XmlElement(name = "login-id")
    protected String loginId;
    @XmlElement(name = "login-username")
    protected String loginUsername;
    @XmlElement(name = "login-password")
    protected String loginPassword;
    @XmlElement(name = "login-note")
    protected String loginNote;
    @XmlElement(name = "contact-name")
    protected String contactName;
    @XmlElement(name = "contact-address")
    protected String contactAddress;
    @XmlElement(name = "contact-phone")
    protected String contactPhone;
    @XmlElement(name = "contact-note")
    protected String contactNote;

    public String getLoginId() {
        return loginId;
    }

    public void setLoginId(String value) {
        this.loginId = value;
    }

    public String getLoginUsername() {
        return loginUsername;
    }

    public void setLoginUsername(String value) {
        this.loginUsername = value;
    }

    public String getLoginPassword() {
        return loginPassword;
    }

    public void setLoginPassword(String value) {
        this.loginPassword = value;
    }

    public String getLoginNote() {
        return loginNote;
    }

    public void setLoginNote(String value) {
        this.loginNote = value;
    }

    public String getContactName() {
        return contactName;
    }

    public void setContactName(String value) {
        this.contactName = value;
    }

    public String getContactAddress() {
        return contactAddress;
    }

    public void setContactAddress(String value) {
        this.contactAddress = value;
    }

    public String getContactPhone() {
        return contactPhone;
    }

    public void setContactPhone(String value) {
        this.contactPhone = value;
    }

    public String getContactNote() {
        return contactNote;
    }

    public void setContactNote(String value) {
        this.contactNote = value;
    }        
}
2
toegevoegd
Helaas, als je groepen elementen mooi wilt "stoppen", ben ik me niet bewust van een manier zonder een nieuwe klas te maken. Als u JAXB gebruikt, heeft u een aangepast inbindbestand nodig. In principe zou ik het op deze manier leuk vinden, in tegenstelling tot het maken van een wrapper-element, omdat het je XML-structuur platter houdt ...
toegevoegd de auteur Petru Gardea, de bron
Nu is de vraag een beetje opgehelderd.
toegevoegd de auteur J___, de bron
En dat is mijn probleem, ik weet niet hoe ik dat moet doen (precies).
toegevoegd de auteur J___, de bron
Mijn xsd is behoorlijk groot, dus dit kan ook leiden tot een enorm bindend bestand dat moeilijk te onderhouden is. Heb ik gelijk met deze theorie?
toegevoegd de auteur J___, de bron
Heel erg bedankt. Je update 2 was precies wat ik zocht.
toegevoegd de auteur J___, de bron