2008-09-02 22 views
6

Khi xác định XSD, bạn có thể chọn để xác định loại của mình là loại lồng nhau hoặc loại toàn cầu (complexType).XSD: Các loại lồng nhau so với các loại toàn cầu

Tôi hiểu rằng các loại toàn cầu được sử dụng nhiều hơn khi nói đến hình thái hoặc tái sử dụng các yếu tố.

Tuy nhiên, nếu bạn có mô hình dữ liệu lớn, bạn sẽ phải xác định cho mỗi cấp một complexType toàn cục và sau đó tạo phần tử tham chiếu đến loại toàn cục.

Nested

<xs:element name="person"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="name"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="firstname"/> 
          <xs:element name="lastname"/> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
       <xs:element name="address"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="street"/> 
          <xs:element name="city"/> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 

toàn cầu

<xs:element name="person"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="name" type="nameType"/> 
      <xs:element name="address" type="addressType"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 
<xs:complexType name="nameType"> 
    <xs:sequence> 
     <xs:element name="firstname"/> 
     <xs:element name="lastname"/> 
    </xs:sequence> 
</xs:complexType> 
<xs:complexType name="addressType"> 
    <xs:sequence> 
     <xs:element name="street"/> 
     <xs:element name="city"/> 
    </xs:sequence> 
</xs:complexType> 

Do đó, câu hỏi của tôi: Khi bạn đang sử dụng loại lồng nhau thay vì làm cho chúng toàn cầu?

Đối với bất kỳ ai quan tâm: Câu hỏi của tôi bằng cách nào đó liên quan đến câu hỏi này (XML attribute vs element).

Trả lời

7

Trong ví dụ được đưa ra, không có sự khác biệt thực sự giữa hai - và không có lợi thế hoặc bất lợi đáng kể cho một trong hai.

Tuy nhiên, trong các lược đồ lớn hơn, mọi thứ có thể rất khó khăn và khó quản lý khi thực hành chọn lồng nhau trên toàn cầu không được xác định rõ ràng.

Những lý do rõ ràng cho việc sử dụng các loại toàn cầu (chủ yếu là sử dụng lại, cũng làm tổ) có xu hướng dictate - nói chung tôi thích một chế độ này hay cách khác. I E. nếu bạn đang sử dụng lại một số loại phức tạp nhưng không phải là các loại khác, hãy làm cho chúng trở thành toàn cầu. Nếu bạn không tái sử dụng bất cứ điều gì, hãy làm cho tất cả chúng được lồng nhau.

Ngoại lệ cho điều này (và đây là điều tôi thường xuyên gặp phải) là nếu định nghĩa của các loại tạo nên phần lớn sự phức tạp (!) Của lược đồ của bạn, và ngăn chứa của chúng tương đối đơn giản. Trong trường hợp này, bất kể chúng được tái sử dụng hay không, tôi khuyên bạn nên làm cho chúng trở nên toàn cầu vì việc cấu trúc lại/sắp xếp lại tài liệu của bạn dễ dàng hơn nhiều khi bạn không phải lội qua các định nghĩa phức tạp lớn. Chúng cũng có tính di động về lý thuyết hơn.

Cũng có trường hợp bạn không thể đạt được cấu trúc tài liệu nhất định với các kiểu lồng nhau - ví dụ về việc này đang sử dụng hai complexTypes theo thứ tự có thể chứa 0 cho các phiên bản không bị chặn của từng loại. Điều này là không thể với các loại lồng nhau, nhưng nó là với các loại toàn cầu được tham chiếu.

Các vấn đề liên quan