عناصر پیچیده (XSD Complex Elements)
عنصر پیچیده (Complex Element) عنصری است که «عنصر دیگر» و/یا «ویژگی (Attribute)» دارد. مثل یک کیف که داخلش دفتر و کارت دانش آموزی هست. تمرکز ما «عناصر پیچیده XSD» است.
تعریف عنصر پیچیده
عنصر پیچیده می تواند خالی باشد، فقط عنصر داشته باشد، فقط متن داشته باشد، یا ترکیبی باشد.
نکته: همه این حالت ها می توانند ویژگی هم داشته باشند.
نمونه های عنصر پیچیده در XML
نمونه خالی با ویژگی:
<product pid="1345" />
فقط شامل عناصر فرزند:
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
فقط متن با ویژگی:
<food type="dessert">Ice cream</food>
ترکیب متن و عنصر:
<description>
It happened on <date lang="norwegian">03.03.99</date> ....
</description>
تعریف عنصر پیچیده در XSD: روش 1 (تعریف درجا)
عنصر را مستقیم تعریف می کنیم. ترتیب با <xs:sequence> مشخص می شود.
<xs:element name="employee">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string" />
<xs:element name="lastname" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
نکته: این نوع فقط برای همین عنصر کاربرد دارد.
تعریف عنصر پیچیده در XSD: روش 2 (نوع نام دار)
نوع پیچیده را نام دار می سازیم و چند عنصر به آن اشاره می کنند.
<xs:element name="employee" type="personinfo" />
<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:element name="employee" type="personinfo" />
<xs:element name="student" type="personinfo" />
<xs:element name="member" type="personinfo" />
<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="firstname" type="xs:string" />
<xs:element name="lastname" type="xs:string" />
</xs:sequence>
</xs:complexType>
گسترش نوع پیچیده موجود (extension)
روی نوع قبلی سوار می شویم و فیلدهای جدید می افزاییم.
<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 بساز.
- نوع personinfo را نام دار کن و دوباره استفاده کن.
- با extension آدرس و شهر را اضافه کن.
نکات و ادامه مسیر
- عناصر پیچیده XSD را به عنوان مرجع علامت گذاری کن.
- برای قیود مقدار به محدودیت ها (XSD Restrictions) سر بزن.
- برای عناصر ساده به عناصر (XSD Elements) مراجعه کن.
جمع بندی سریع
- عنصر پیچیده می تواند فرزند و ویژگی داشته باشد.
- sequence ترتیب فرزندان را اجباری می کند.
- نوع نام دار در چند عنصر استفاده می شود.
- extension روی نوع قبلی فیلد می افزاید.