عنصر complexType XML Schema

تعریف و استفاده

عنصر complexType تعریف نوع پیچیده. عناصر نوع پیچیده شامل عناصر دیگر و/یا ویژگی‌های XML هستند.

اطلاعات عنصر

تعداد ظهور در ساختار به صورت نامحدود است؛ در عنصر به صورت یک بار.
عنصر والد element،redefine،schema
متن annotation،simpleContent،complexContent،group،all،choice،sequence،attribute،attributeGroup،anyAttribute

زبان نوشتاری

<complexType
id=ID 
name=NCName 
abstract=true|false 
mixed=true|false
block=(#all|list of (extension|restriction))
final=(#all|list of (extension|restriction))
ویژگی‌های هرچه که باشد
>
(annotation?,(simpleContent|complexContent|((group|all| 
choice|sequence)?,((attribute|attributeGroup)*,anyAttribute?))))
</complexType>

(? نشانه‌گذاری در عنصر complexType انجام شده است، عنصر می‌تواند صفر یا یک بار ظاهر شود، * نشانه‌گذاری شده است که عنصر می‌تواند صفر یا چند بار ظاهر شود.)

ویژگی‌ها

id

اختیاری. تعیین شناسه منحصر به فرد این عنصر.

name

اختیاری. تعیین نام عنصر.

abstract

اختیاری. تعیین اینکه آیا می‌توان از نوع پیچیده در مستند نمونه استفاده کرد یا خیر. اگر این مقدار true باشد، عنصر نمی‌تواند مستقیماً از این نوع پیچیده استفاده کند، بلکه باید از نوع پیچیده پیرو استفاده کند. مقدار پیش‌فرض false است.

mixed

اختیاری. تعیین اینکه آیا داده‌های کاراکتری باید بین زیرعناصر این نوع پیچیده وجود داشته باشد یا خیر. مقدار پیش‌فرض false است.

  • اگر عنصر simpleContent به عنوان زیرعنصر باشد، استفاده از ویژگی mixed مجاز نیست.
  • اگر عنصر complexContent به عنوان زیرعنصر باشد، این ویژگی mixed می‌تواند توسط ویژگی mixed عنصر complexContent نوشته شود.

block

اختیاری. جلوگیری از استفاده از نوع پیرو مشخص شده به جای این نوع پیچیده. این مقدار می‌تواند شامل #all یا یک لیست باشد که این لیست زیر مجموعه‌ای از extension یا restriction است:

  • extension - جلوگیری از استفاده از نوع پیروهای پیچیده که از طریق گسترش ایجاد شده‌اند به جای این نوع پیچیده.
  • restriction - جلوگیری از استفاده از نوع پیروهای پیچیده که از طریق محدودیت ایجاد شده‌اند به جای این نوع پیچیده.
  • #all - جلوگیری از استفاده از همه نوع پیروهای پیچیده به جای این نوع پیچیده.

final

اختیاری. جلوگیری از استفاده از نوع پیرو از این عنصر complexType. این مقدار می‌تواند شامل #all یا یک لیست باشد که این لیست زیر مجموعه‌ای از extension یا restriction است.

  • extension - جلوگیری از ارث‌برداری از طریق گسترش.
  • restriction - جلوگیری از ارث‌برداری از طریق محدودیت.
  • #all - جلوگیری از همه نوع ارث‌برداری (گسترش و محدودیت).

ویژگی‌های هرچه که باشد

اختیاری. تعیین هرگونه ویژگی دیگر با نام‌ فضای نام غیرشکلی.

مثال

مثال 1

در این مثال یک نوع پیچیده به نام "note" وجود دارد:

<xs:element name="note">
    <xs:complexType>
      <xs:sequence>
	<xs:element name="to" type="xs:string"/>
	<xs:element name="from" type="xs:string"/>
	<xs:element name="heading" type="xs:string"/>
	<xs:element name="body" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
</xs:element>

مثال 2

در این مثال یک نوع پیچیده "fullpersoninfo" وجود دارد که از طریق استفاده از سه عنصر اضافی (address، city و country) نوع ارث‌برداری شده را گسترش می‌دهد، که از یک نوع پیچیده دیگر "personinfo" مشتق شده است:

<xs:element name="employee" type="fullpersoninfo"/>
<xs:complexType name="personinfo">
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
  </xs:sequence>
</xs:complexType>
<xs:complexType name="fullpersoninfo">
  <xs:complexContent>
    <xs:extension base="personinfo">
      <xs:sequence>
        <xs:element name="address" type="xs:string"/>
        <xs:element name="city" type="xs:string"/>
        <xs:element name="country" type="xs:string"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

در مثال‌های بالا، عنصر "employee" باید به ترتیب شامل عناصر زیر باشد: "firstname", "lastname", "address", "city" و "country".