2010-09-27 14 views
8

To jest część mojego schematu XMLxsd: Jak przedłużyć typ z nieuporządkowanej liście elementów

<xs:complexType name="Friend"> 
    <xs:all> 
     <xs:element name="name" type="xs:string" /> 
     <xs:element name="phone" type="xs:string" /> 
     <xs:element name="address" type="xs:string" /> 
    </xs:all> 
</xs:complexType> 

<xs:complexType name="Coworker"> 
    <xs:all> 
     <xs:element name="name" type="xs:string" /> 
     <xs:element name="phone" type="xs:string" /> 
     <xs:element name="office" type="xs:string" /> 
    </xs:all> 
</xs:complexType> 

Dla lepszej konserwacji, chciałbym mieć wspólne atrybuty w (streszczenie) super typ czy coś takiego. Ale co ważniejsze, chcę, aby wszystkie elementy były nieuporządkowane, a także opcjonalne.

Czy to możliwe i jaki jest najlepszy sposób na zrobienie tego?

Odpowiedz

13

Musisz trochę się ograniczyć, niektóre rzeczy, które próbujesz zrobić, nie są możliwe w schemacie XML.

Załóżmy, że wprowadzono złożony typ o nazwie Person, który jest supertypem Friend i Coworker. Oto opcje:

  1. Wymień xs:all z xs:sequence, usunąć name i phone z podtypów, dodać do super-type i dodać dziedziczenia. Twoje elementy muszą teraz zostać zamówione, ale możesz je ustawić indywidualnie opcjonalnie. Jest niedozwolone używać xs:all w hierarchiach typów w schemacie XML, ponieważ procesor nie może stwierdzić, gdzie zatrzymuje się model zawartości nadrzędnej i rozpoczyna się model zawartości podrzędnej.
  2. Wymień xs:all na <xs:choice maxOccurs="unbounded"> w obu typach i dodaj dziedziczenie. Wtedy twoje elementy zostają nieuporządkowane, ale mogą się powtórzyć.

Podsumowując: biorąc pod uwagę nazwy twoich typów, zgaduję, że twoje wymagania nie zostaną dokładnie spełnione. Poszedłem na pierwszą opcję: naleganie na arbitralny porządek elementów często nie jest tak przydatne, jak się wydaje.

+0

Obawiałem się, że tak będzie. Tak (1) tak będzie. – Cephalopod

Powiązane problemy