با سلام خدمت کاربران گرامی سایت پی وی لرن و علاقمندان و کاربرانی که علاقمند به یادگیری دوره XML هستند. در جلسه گذشته به کار با عنصر anyAttribute پرداختیم. طبق مطالب این جلسه پی بردیم که anyAttribute عنصری است که ما را قادر به گسترش سند XML با استفاده attributes می سازد که در schema مشخص نگردیده اند. در این جلسه که آخرین جلسه از سر فصل آموزشی schema است؛ این سر فصل را با آموزش جایگزینی عناصر در schema به پایان می بریم.
XML Schemas این امکان را به ما می دهد که بتوانیم عناصر را به جای هم جایگزین نماییم.
حالت زیر را تصور کنید.
دو کاربر داریم که یکی اهل نروژ و و دیگری نیز اهل انگلیس است.
حالا کاربر نروژی دوست دارد که از عناصر نروژی و متقابلاً کاربر انگلیس نیز علاقمند به استفاده از عناصر انگلیسی در سند XML است!
برای حل این مشکل، می توانیم یک SubstitutionGroup را در XML schema تعریف کنیم.
ابتدا عنصر head را اعلام می کنیم و سپس به اعلام سایر عناصر می پردازیم که بیان می کنند برای عنصر head قابل تعویض هستند.
1 2 | <xs:element name="name" type="xs:string"/> <xs:element name="navn" substitutionGroup="name"/> |
در مثال بالا، عنصر “name” عنصر head است و عنصر “navn” برای “name” قابل تعویض می باشد.
به این قطعه از یک XML schema نگاه کنید:
1 2 3 4 5 6 7 8 9 10 11 | <xs:element name="name" type="xs:string"/> <xs:element name="navn" substitutionGroup="name"/> <xs:complexType name="custinfo"> <xs:sequence> <xs:element ref="name"/> </xs:sequence> </xs:complexType> <xs:element name="customer" type="custinfo"/> <xs:element name="kunde" substitutionGroup="customer"/> |
سند معتبر XML (مطابق با schema فوق) می تواند چنین باشد:
1 2 3 | <customer> <name>John Smith</name> </customer> |
یا مانند این:
1 2 3 | <kunde> <navn>John Smith</navn> </kunde> |
برای جلوگیری از جایگزینی عناصر با عنصر مشخص شده، از block attribute استفاده کنید:
1 | <xs:element name="name" type="xs:string" block="substitution"/> |
به این قطعه از یک XML schema توجه نمایید:
1 2 3 4 5 6 7 8 9 10 11 | <xs:element name="name" type="xs:string" block="substitution"/> <xs:element name="navn" substitutionGroup="name"/> <xs:complexType name="custinfo"> <xs:sequence> <xs:element ref="name"/> </xs:sequence> </xs:complexType> <xs:element name="customer" type="custinfo" block="substitution"/> <xs:element name="kunde" substitutionGroup="customer"/> |
سند معتبر XML (مطابق با schema فوق) می تواند چنین باشد:
1 2 3 | <customer> <name>John Smith</name> </customer> |
اما LONGER معتبر ما نخواهد بود:
1 2 3 | <kunde> <navn>John Smith</navn> </kunde> |
نوع عناصر قابل تعویض باید همانند نوع عنصر head یا from آن باشد.
اگر نوع عنصر قابل تعویض همان نوع عنصر head شما باشد، لازم نیست نوع عنصر قابل تعویض را مشخص کنید.
توجه داشته باشید که تمام عناصر در substitutionGroup (عنصر head و عناصر قابل تعویض) باید به عنوان عناصر global اعلام شود، در غیر این صورت کار نمی کنند!
عناصر global فرزندان فوری immediate children عنصر “schema” هستند! و عناصر محلی Local elements نیز عناصر موجود در عناصر دیگر می باشند.
سر فصل schema را با آموزش جایگزینی عناصر در schema به پایان بردیم.
فصل بعدی در دوره آموزش XML سر فصل XSD خواهد بود.
با پی وی لرن همراه باشید.