XML امروزه یک فرمت بسیار محبوب و انعطاف پذیر است. هر برنامه نویسی باید آن را درک کند، آن را به سادگی باید داشته باشد. امروزه بسیاری از فناوری ها به طور فعال از آن استفاده می کنند و فناوری های مدرن از جمله آنها هستند.
معرفی
سلام، خوانندگان عزیز مقاله من. می خواهم فوراً بگویم که این تنها اولین مقاله از سری سه مقاله من است. هدف اصلی کل مجموعه این است که هر خواننده را به XML راه بیندازد و اگر توضیح و درک کاملی نداشته باشد، حداقل یک فشار خوب به سمت آن ارائه دهد و نکات و موارد اصلی را توضیح دهد. کل چرخه برای یک نامزدی خواهد بود - "توجه به جزئیات" ، و تقسیم به 3 مقاله به منظور قرار گرفتن در محدودیت شخصیت در پست ها و تقسیم مقدار زیادی از مطالب به بخش های کوچکتر برای درک بیشتر انجام می شود. مقاله اول به خود XML و چیستی آن و همچنین یکی از روش های ایجاد طرحواره برای فایل های XML - DTD اختصاص داده خواهد شد. برای شروع، می خواهم یک مقدمه کوچک برای کسانی که هنوز با XML آشنایی ندارند بیان کنم: نیازی به ترس نیست. XML خیلی پیچیده نیست و باید توسط هر برنامه نویسی قابل درک باشد، زیرا امروزه یک فرمت فایل بسیار انعطاف پذیر، کارآمد و محبوب برای ذخیره انواع اطلاعات مورد نظر شما است. XML در Ant، Maven، Spring استفاده می شود. هر برنامه نویسی به دانش XML نیاز دارد. حالا که نیرو و انگیزه را جمع کرده اید، بیایید شروع به مطالعه کنیم. من سعی خواهم کرد که تمام مواد را به ساده ترین شکل ممکن بچینم و فقط مهم ترین ها را جمع آوری کنم و به علف های هرز نروم.XML
برای توضیح واضح تر، بهتر است XML را با یک مثال تجسم کنید.<?xml version="1.0" encoding="UTF-8"?>
<company>
<name>IT-Heaven</name>
<offices>
<office floor="1" room="1">
<employees>
<employee>
<name>Maksim</name>
<job>Middle Software Developer</job>
</employee>
<employee>
<name>Ivan</name>
<job>Junior Software Developer</job>
</employee>
<employee>
<name>Franklin</name>
<job>Junior Software Developer</job>
</employee>
</employees>
</office>
<office floor="1" room="2">
<employees>
<employee>
<name>Herald</name>
<job>Middle Software Developer</job>
</employee>
<employee>
<name>Adam</name>
<job>Middle Software Developer</job>
</employee>
<employee>
<name>Leroy</name>
<job>Junior Software Developer</job>
</employee>
</employees>
</office>
</offices>
</company>
HTML و XML از نظر نحو شبیه به هم هستند زیرا آنها یک والد مشترک دارند - SGML. با این حال، در HTML فقط تگ های ثابت با یک استاندارد خاص وجود دارد، در حالی که در XML می توانید برچسب ها، ویژگی های خود را ایجاد کنید و به طور کلی، هر کاری را که می خواهید برای ذخیره داده ها به روشی که مناسب شما است انجام دهید. در واقع، فایل های XML توسط هر کسی که انگلیسی بلد باشد قابل خواندن است. این مثال را می توان با استفاده از یک درخت به تصویر کشید. ریشه درخت شرکت است. همچنین عنصر ریشه (ریشه) است که همه عناصر دیگر از آن می آیند. هر فایل XML فقط می تواند یک عنصر ریشه داشته باشد. باید پس از اعلان فایل xml (خط اول در مثال) اعلان شود و شامل تمام عناصر دیگر باشد. کمی در مورد اظهارنامه: اجباری است و برای شناسایی سند به عنوان XML مورد نیاز است. دارای سه شبه صفت (ویژگی های از پیش تعریف شده ویژه): نسخه (طبق استاندارد 1.0)، رمزگذاری (رمزگذاری) و مستقل (مستقل: اگر بله و طرح های خارجی به سند وصل شده باشند، خطا وجود دارد، پیش فرض است. خیر است). عناصر موجودیت هایی هستند که داده ها را با استفاده از عناصر و ویژگی های دیگر ذخیره می کنند. ویژگی ها اطلاعات اضافی در مورد یک عنصر هستند که هنگام اضافه کردن یک عنصر مشخص می شوند. اگر توضیح را به یک فیلد OOP ترجمه کنیم، میتوانیم مثال زیر را بیاوریم: ما یک ماشین داریم، هر ماشین دارای ویژگیهایی است (رنگ، ظرفیت، مارک و غیره) - اینها ویژگیها هستند و موجودیتهایی وجود دارند که در داخل ماشین هستند. : درها، پنجره ها، موتور، فرمان از دیگر عناصر هستند. بسته به میل خود می توانید ویژگی ها را به عنوان عناصر جداگانه یا به عنوان ویژگی ذخیره کنید. پس از همه، XML یک قالب بسیار انعطاف پذیر برای ذخیره اطلاعات در مورد هر چیزی است. بعد از توضیحات، کافی است به مثال بالا نگاه کنیم تا همه چیز سر جای خودش قرار بگیرد. در مثال، ما یک ساختار ساده شرکت را توضیح دادیم: یک شرکت وجود دارد که دارای نام و دفاتر است و در دفاتر کارمندان وجود دارند. عناصر Employees و Offices عناصر بسته بندی هستند - آنها برای جمع آوری عناصر از یک نوع، اساساً آنها را در یک مجموعه برای سهولت پردازش ترکیب می کنند. طبقه و اتاق مستحق توجه ویژه است. اینها صفات دفتر (طبقه و شماره) و به عبارت دیگر خواص آن است. اگر ما یک عنصر "تصویر" داشتیم، می توانستیم ابعاد آن را منتقل کنیم. ممکن است متوجه شوید که شرکت دارای ویژگی نام نیست، اما دارای یک عنصر نام است. شما به سادگی می توانید ساختارها را آنطور که می خواهید توصیف کنید. هیچ کس شما را ملزم نمی کند که تمام ویژگی های عناصر را فقط در ویژگی ها بنویسید، می توانید فقط از عناصر استفاده کنید و برخی داده ها را درون آنها بنویسید. به عنوان مثال، ما می توانیم نام و موقعیت کارکنان خود را به عنوان ویژگی ها ثبت کنیم:
<?xml version="1.0" encoding="UTF-8"?>
<company>
<name>IT-Heaven</name>
<offices>
<office floor="1" room="1">
<employees>
<employee name="Maksim" job="Middle Software Developer">
</employee>
<employee name="Ivan" job="Junior Software Developer">
</employee>
<employee name="Franklin" job="Junior Software Developer">
</employee>
</employees>
</office>
<office floor="1" room="2">
<employees>
<employee name="Herald" job="Middle Software Developer">
</employee>
<employee name="Adam" job="Middle Software Developer">
</employee>
<employee name="Leroy" job="Junior Software Developer">
</employee>
</employees>
</office>
</offices>
</company>
همانطور که می بینید اکنون نام و موقعیت هر کارمند از ویژگی های اوست. و می توانید متوجه شوید که چیزی در داخل نهاد کارمند (برچسب) وجود ندارد، همه عناصر کارمند خالی هستند. سپس می توانید کارمند را به یک عنصر خالی تبدیل کنید - بلافاصله پس از اعلام ویژگی ها آن را ببندید. این کار به سادگی انجام می شود، فقط یک اسلش اضافه کنید:
<?xml version="1.0" encoding="UTF-8"?>
<company>
<name>IT-Heaven</name>
<offices>
<office floor="1" room="1">
<employees>
<employee name="Maksim" job="Middle Software Developer" />
<employee name="Ivan" job="Junior Software Developer" />
<employee name="Franklin" job="Junior Software Developer" />
</employees>
</office>
<office floor="1" room="2">
<employees>
<employee name="Herald" job="Middle Software Developer" />
<employee name="Adam" job="Middle Software Developer" />
<employee name="Leroy" job="Junior Software Developer" />
</employees>
</office>
</offices>
</company>
همانطور که می بینید، با بستن عناصر خالی، تمام یکپارچگی اطلاعات را حفظ کردیم و رکورد را تا حد زیادی کوتاه کردیم و اطلاعات را مختصرتر و خواناتر کردیم. برای افزودن یک نظر (متنی که هنگام تجزیه یک فایل حذف می شود) در XML، دستور زیر وجود دارد:
<!-- Ivan недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
و آخرین ساخت CDATA است که به معنای "داده های کاراکتر" است. به لطف این طراحی، امکان نوشتن متنی وجود دارد که به عنوان نشانه گذاری XML تفسیر نشود. اگر موجودی در فایل XML دارید که نشانه گذاری XML را در اطلاعات ذخیره می کند، مفید است. مثال:
<?xml version="1.0" encoding="UTF-8" ?>
<bean>
<information>
<![CDATA[<name>Ivan</name><age>26</age>]]>
</information>
</bean>
نکته ای که در مورد XML وجود دارد این است که می توانید آن را هر طور که می خواهید گسترش دهید: از عناصر خود، ویژگی های خود استفاده کنید و آن را همانطور که می خواهید ساختار دهید. شما می توانید از هر دو ویژگی و عناصر برای ذخیره داده ها استفاده کنید (همانطور که در مثال قبلی نشان داده شد). با این حال، باید بدانید که میتوانید عناصر و ویژگیهای خود را در همان لحظه و هر طور که میخواهید ارائه دهید، اما اگر روی پروژهای کار کنید که در آن برنامهنویس دیگری بخواهد عنصر نام را به ویژگیها و کل منطق برنامهتان منتقل کند، چه میشود. نوشته شده است که نام عنصر بود؟ چگونه می توانید قوانین خود را در مورد اینکه چه عناصری باید باشند، چه ویژگی هایی دارند و موارد دیگر ایجاد کنید تا بتوانید فایل های XML را اعتبارسنجی کنید و مطمئن باشید که قوانین در پروژه شما استاندارد می شوند و هیچکس آنها را نقض نمی کند؟ برای نوشتن تمام قوانین نشانه گذاری XML خود، ابزارهای خاصی وجود دارد. معروف ترین: طرحواره DTD و XML. این مقاله فقط در مورد اول صحبت خواهد کرد.
DTD
DTD برای توصیف انواع اسناد ایجاد شده است. DTD در حال حاضر منسوخ شده است و اکنون به طور فعال در XML کنار گذاشته می شود، اما هنوز فایل های XML زیادی وجود دارند که از DTD استفاده می کنند و به طور کلی، درک آن مفید است. DTD یک فناوری برای اعتبارسنجی اسناد XML است . یک DTD قوانین خاصی را برای یک نوع سند اعلام می کند: عناصر آن، عناصری که می توانند در داخل عنصر باشند، ویژگی ها، اینکه آیا آنها مورد نیاز هستند یا نه، تعداد تکرارهای آنها و همچنین موجودیت ها. مشابه XML، یک DTD را می توان با یک مثال برای توضیح واضح تر تجسم کرد.<!-- Объявление возможных элементов -->
<!ELEMENT employee EMPTY>
<!ELEMENT employees (employee+)>
<!ELEMENT office (employees)>
<!ELEMENT offices (office+)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (name, offices)>
<!-- Добавление атрибутов для элементов employee и office -->
<!ATTLIST employee
name CDATA #REQUIRED
job CDATA #REQUIRED
>
<!ATTLIST office
floor CDATA #REQUIRED
room CDATA #REQUIRED
>
<!-- Добавление сущностей -->
<!ENTITY M "Maksim">
<!ENTITY I "Ivan">
<!ENTITY F "Franklin">
در اینجا ما یک مثال ساده داریم. در این مثال، ما کل سلسله مراتب خود را از مثال XML اعلام کردیم: کارمند، کارمندان، دفتر، دفاتر، نام، شرکت. برای ایجاد فایلهای DTD، از 3 ساختار اصلی برای توصیف هر فایل XML استفاده میشود: ELEMENT (برای توصیف عناصر)، ATTLIST (برای توصیف ویژگیهای عناصر) و ENTITY (برای جایگزینی متن با فرمهای اختصاری). ELEMENT برای توصیف یک عنصر استفاده می شود. عناصری که می توانند در عنصر توصیف شده استفاده شوند در داخل پرانتز به شکل لیست فهرست شده اند. می توانید از کمیت سازها برای نشان دادن کمیت استفاده کنید (آنها شبیه به کمیت کننده های عبارات منظم هستند): +
معنی 1+
*
معنی می دهد 0+
?
یا اگر 0
هیچ 1
کمی کننده اضافه نشده باشد، فرض می شود که فقط 1 عنصر وجود داشته باشد. اگر به یکی از یک گروه از عناصر نیاز داشتیم، میتوانیم آن را به شکل زیر بنویسیم:
<!ELEMENT company ((name | offices))>
سپس یکی از عناصر انتخاب می شود: نام یا دفاتر، اما اگر دو مورد از آنها در شرکت وجود داشته باشد، اعتبار سنجی انجام نمی شود. همچنین می توانید متوجه شوید که در کارمند کلمه EMPTY وجود دارد - این بدان معنی است که عنصر باید خالی باشد. هر عنصری نیز وجود دارد. #PCDATA – داده های متنی. ATTLIST برای افزودن ویژگی به عناصر استفاده می شود. پس از ATTLIST نام عنصر مورد نظر و پس از آن یک فرهنگ لغت به شکل "نام ویژگی - نوع ویژگی" را دنبال می کنید و در پایان می توانید #IMPLIED (اختیاری) یا #REQUIRED (الزامی) را اضافه کنید. CDATA - داده های متنی. انواع دیگری نیز وجود دارد، اما همه آنها حروف کوچک هستند. ENTITY ENTITY برای اعلام اختصارات و متنی که روی آنها قرار می گیرد استفاده می شود. در واقع، ما به سادگی قادر خواهیم بود در XML به جای متن کامل، فقط از نام موجودیت با علامت & قبل از و ; بعد از. به عنوان مثال: برای تمایز بین نشانه گذاری HTML و فقط کاراکترها، براکت زاویه سمت چپ اغلب با lt حذف می شود. ، فقط باید & قبل از lt. سپس ما از نشانه گذاری استفاده نمی کنیم، بلکه فقط از نماد < استفاده می کنیم. همانطور که می بینید، همه چیز کاملاً ساده است: شما عناصری را اعلام می کنید، توضیح می دهید که عناصر اعلام شده می توانند شامل چه عناصری باشند، ویژگی هایی را به این عناصر اضافه می کنید و در صورت تمایل، می توانید موجودیت هایی را برای کوتاه کردن برخی از ورودی ها اضافه کنید. و در اینجا باید بپرسید: چگونه از قوانین خود در فایل XML خود استفاده کنیم؟ از این گذشته، ما به سادگی قوانین را اعلام کردیم، اما از آنها در XML استفاده نکردیم. دو راه برای استفاده از آنها در XML وجود دارد: 1. جاسازی - نوشتن قوانین DTD در داخل خود فایل XML، فقط عنصر ریشه را بعد از کلمه کلیدی DOCTYPE بنویسید و فایل DTD خود را داخل پرانتز قرار دهید.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE company [
<!-- Объявление возможных элементов -->
<!ELEMENT employee EMPTY>
<!ELEMENT employees (employee+)>
<!ELEMENT office (employees)>
<!ELEMENT offices (office+)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (name, offices)>
<!-- Добавление атрибутов для элементов employee и office -->
<!ATTLIST employee
name CDATA #REQUIRED
job CDATA #REQUIRED
>
<!ATTLIST office
floor CDATA #REQUIRED
room CDATA #REQUIRED
>
<!-- Добавление сущностей -->
<!ENTITY M "Maksim">
<!ENTITY I "Ivan">
<!ENTITY F "Franklin">
]>
<company>
<name>IT-Heaven</name>
<!-- Ivan недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
<offices>
<office floor="1" room="1">
<employees>
<employee name="&M;" job="Middle Software Developer" />
<employee name="&I;" job="Junior Software Developer" />
<employee name="&F;" job="Junior Software Developer" />
</employees>
</office>
<office floor="1" room="2">
<employees>
<employee name="Herald" job="Middle Software Developer" />
<employee name="Adam" job="Middle Software Developer" />
<employee name="Leroy" job="Junior Software Developer" />
</employees>
</office>
</offices>
</company>
2. Import - ما همه قوانین خود را در یک فایل DTD جداگانه می نویسیم، پس از آن در فایل XML از ساخت DOCTYPE از روش اول استفاده می کنیم، فقط به جای براکت باید SYSTEM را بنویسید و یک مسیر مطلق یا نسبی را به آن مشخص کنید. مکان فعلی فایل
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE company SYSTEM "dtd_example1.dtd">
<company>
<name>IT-Heaven</name>
<!-- Ivan недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
<offices>
<office floor="1" room="1">
<employees>
<employee name="&M;" job="Middle Software Developer" />
<employee name="&I;" job="Junior Software Developer" />
<employee name="&F;" job="Junior Software Developer" />
</employees>
</office>
<office floor="1" room="2">
<employees>
<employee name="Herald" job="Middle Software Developer" />
<employee name="Adam" job="Middle Software Developer" />
<employee name="Leroy" job="Junior Software Developer" />
</employees>
</office>
</offices>
</company>
همچنین می توانید به جای SYSTEM از کلمه کلیدی PUBLIC استفاده کنید، اما بعید است که برای شما مفید باشد. اگر علاقه مند هستید، می توانید در مورد آن (و همچنین در مورد SYSTEM) با جزئیات اینجا بخوانید: پیوند . اکنون نمیتوانیم عناصر دیگر را بدون اعلام آنها در DTD استفاده کنیم و تمام XML تابع قوانین ما هستند. می توانید این کد را در IntelliJ IDEA در یک فایل جداگانه با پسوند xml بنویسید و سعی کنید چند عنصر جدید اضافه کنید یا یک عنصر را از DTD ما حذف کنید و متوجه شوید که چگونه IDE خطا را به شما نشان می دهد. با این حال، DTD دارای معایبی است:
- این سینتکس خاص خود را دارد که با سینتکس xml متفاوت است.
- یک DTD هیچ بررسی نوع داده ای ندارد و فقط می تواند شامل رشته ها باشد.
- هیچ فضای نامی در DTD وجود ندارد.
GO TO FULL VERSION