Jaxb problem z xsd

0

Witam
Dokładnie to potrzebuje utworzyć odpowiedni dokument dla xsd dla JAXB , próbuje coś działać ale ciężko mi to idzie :/
ogólnie mam coś takiego :

 
<xs:element name="Names">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="defaultType" type="default_type"/>
      <xs:element name="Name"  minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="name" type="xs:string"  minOccurs="1" maxOccurs="1">
           
            </xs:element>
            <xs:element name="path" type="xs:string"  minOccurs="1" maxOccurs="1"/>
            <xs:element name="type" type="default_type"
            minOccurs="1" maxOccurs="1"/>
            <xs:element name="subType" type="xs:string" minOccurs="1" maxOccurs="1"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:simpleType name="default_type">
  <xs:restriction base="xs:string">
    <xs:enumeration value="GLOBAL"/>
    <xs:enumeration value="LOCAL"/>
    <xs:enumeration value="MODULE"/>
  </xs:restriction>
</xs:simpleType> 

Ogólnie działa mi to fajnie tylko nie mogę sobie jeszcze poradzić z paroma rzeczami , a mianowicie :
1)aby element name był unikalny i jego nazwa miała następujący pattern: "UPPERCASE"_MASZYNA
(czyli żeby zaczynała się od dowolnej ilości dużych liter i kończyła stringiem _MASZYNA) i żeby tylko 1 unikalny element o takiej nazwie
2)Potrzebuje zrobić własny typ dla elementu o nazwie subType podobny jak przy default_type czyli żeby były jakieś zdefiniowane nazwy do wyboru / lub własna nazwa

czyli coś ala:

 
</xs:schema>
<xs:simpleType name="default_type">
  <xs:restriction base="xs:string">
    <xs:enumeration value="GLOBAL"/>
    <xs:enumeration value="LOCAL"/>
    <xs:enumeration value="MODULE"/>
     lub TO CO SOBIE UŻYTKOWNIK NAPISZE
  </xs:restriction>
</xs:simpleType> 



  1. i jeszcze jedno potrzebuję aby element
<xs:element name="type" type="default_type"
            minOccurs="1" maxOccurs="1"/> 

miał ustawioną wartość default na taką jaka jest w elemencie
<xs:element name="DefaultJndiType" type="jndi_type"/>

Jak ktoś się bawił coś xsd to wielki dzieki za podpowiedzi :)

0

Nie znam na pamięć specyfikacji XSD, ale mogę powiedzieć, że coś się bawiłem. Ja to widzę tak:

  1. Nie przypominam sobie, żeby XSD dawał możliwość zdefiniowania ograniczenia w ten sposób. Trudno mi też sobie wyobrazić jak by się to miało w JAXB przetłumaczyć, bo to będą nazwy pól. Zamiast tego proponowałbym nazwać konkretnie element, powiedzmy NAME_MASZYNA i dodać do niego atrybut name i na ten atrybut nałożyć rzeczone ograniczenia. Unikalność można wymusić używając xsd:key i xsd:keyref.
  2. Do czegoś takiego można użyć typu prostego zdefiniowanego jako union, tyle że to trochę bez sensu. W unii będziesz mieć prosty typ wyliczeniowy i dowolny string, a więc tak na prawdę tam nie będzie ograniczenia. Jedyny sens takiej unii byłby wtedy, jakbyś chciał odczytać programowo te wartości wyliczeniowe i powiedzmy, że dodać je do kontrolki typu combobox z możliwością edycji.
  3. To jest dynamiczne przypisanie, na poziomie XML, więc też mam wątpliwości, czy się da w schemacie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1