‫‫ namespace ها در داخل تنظیمات کانفیگ xml اسپرینگ چه چیزی هستند؟

‫namespace ها بطور کلی مثل import کردن یک کلاس در جاوا هستند ولی اینجا دیگه کلاس نیست، ویژگی ها و functionality هایی هستش که میشه داخل تگ beans تگ هاش رو اضافه کرد و استفاده کرد.

‫اگر در داخل beans تگ xmlns ی وجود داره که در جلوی این تگ “=” هستش به این معنی هستش که میشه دستورات اون name space رو مستقیم توی تگ beans استفاده کرد :
<beans xmlns=”url-baraye-namespace”

‫توجه داشته باشید که
‫xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
‫برای این هستش که محتویات یک فایل xml از نظر لایه ای بررسی بشه و validate بشه

‫بعد یک namespace دیگری به نام schemaLocation از این xsi استفاده میکند. توجه داشته باشید که این namespace حتما باید با این اسم تعریف بشود. این schemaLocation یک attribute خاص هست که از XMLSchema-instance میاد و معنای خاصی به برنامه ای به نام Validating Parser میدهد. اگر دقت کنین در داخل تنظیمات namespace اسپرینگ دو تا URL به این بخش پاس داده شده است

‫http://www.springframework.org/schema/beans
‫http://www.springframework.org/schema/beans/spring-beans.xsd

‫این به این معناس که ما به این Validator Parser عه w3 میگیم که مستر validator این structure و گرامر و vocabolary و role یه فایل xml من باید باشه و اگر تعریفی در داخل اینجا انجام بشه که خارج از این قوانین باشه شما باید خطا نمایش بدهید. مثلا توی این می شه معین کرد که :
‫۱- کدوم تگ ها یدونه هستند
‫۲- کدوم یکی از اینها ترتیب بندی دارن
‫۳- کدوما میتونن sub tag داشته باشن
‫۴- کدوم ها میتونن بیشتر از یدونه باشن
‫۵- کدوما مورد نیاز هستند، کدوما اختیاری هستند

‫اگر خیلی به این قوانین علاقه مند هستین میتونین این آدرس را مشاهده کنید :

‫http://www.springframework.org/schema/beans/spring-beans.xsd

‫رو داخل مرورگرتون قرار بدین و فایل رو بررسی کنید. یادتون باشه که فرمت xsd به معنای schema هستش

‫نکته : توجه داشته باشید که این Validation توسط Spring Container انجام میشه و اون خودش از همه این قوانین و role ها آگاه هستش، بطور ویژه ای اون spring-beans.xsd . بنابراین وقتی که شما اون رو توی فایل config قرار میدین نیازی به این نداره که بره توی اینترنت و اون فایله رو خودش دانلود کنه و استفاده کنه. خودش بنابرپیش فرض دارتش و فقط شما باید تگش رو بزارین اونجا که بدونه باید این validation رو انجام بده.

‫نکته ۲ ؛ schemaLocation همیشه از ۲ بخش تشکیل میشه.
‫1-namespace
‫2-schema
‫برای همین هستش که شما دو تا URL “جفتی” همیشه داخلش باهم دارین.
‫حال اگر شما بخواین یکسری ویژگی جدید رو اضافه کنین، با توجه به دودویی بودن این namespace و schema باید توی خطوط بعدی داخل همون
‫schemaLocation
‫اون namespace و schema یه جدیدی رو که میخواین ار دستوراتش استفاده بکنین رو اضافه کنین. مثلا اگر بخواین namespace عه context رو اضافه کنین و از ویژگی هاش استفاده کنید schemaLocation عه شما به این شکل میشه ؛

xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

 

‫که جفت اول که برای خود beans های اسپرینگ هستش و جفت دوم برای context

‫اگرم یخواین از اسم دیگه ای بعنوان تگ برای یک namespace استفاده کنین باید اضافش کنین.
‫مثلا توی همین کیس اگر بخواین از تگ context داخل بدنه تگ اصلی beans استفاده کنین، باید همون ‫namespace رو با تگ xmlns بعنوان یک attribute در داخل تگ beans تعریف کنین. به این شکل میشه :

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="................."

 

‫خلاصه مبحث:
‫هر namespace ی که بخواد در داخل اسپرینگ استفاده بشه باید داخل تگ schemaLocation موجود namespace و schema ش تعریف بشه و اگر خواستین از تگ خاصی با نام خاصم استفاده کنین، (بعد از تعریف اون جفت namespace و schema ) باید اون تگ رو بعنوان attribute های تگ bean تون با “اسم” مورد نظرتون تعریف کنین و قرار بدین.

#spring_name_spaces #spring_xml_configuration #namespaces

Published by

mehdi

I'm a Passionate Software Developer and Team Leader