ساخت گراف دانش از داده های ویکی پدیا

16:38, 06/30,2017

 به نام خدا..
 
سلام به همه ی دوستان عزیز. امیدوارم حالتون خوب و ایام به کامتون باشه.. 
 
در ادامه پست قبلی و البته مقدمه ای که در پست قبل تر از آن گفتم، نهایتا در این پست می خواهم یک روش جالب را برای ساخت گراف دانش ارائه بدهم...
 

با ویکی پدیا بحث را ادامه می دهیم. همانطور که گفته شد، اینفوباکس ها شامل داده هایی ساخت یافته هستند که شامل زوج "خصیصه و مقدار" می باشند. به طور خاص می توان روش زیر را ارئه داد تا از داده ها xml ای ویکی پدیا به 3 گانه های مشابه دیبی پدیا برسیم.

این روش، 3 گام دارد. استخراج داده، تمیز کردن داده و تبدیل.

در استخراج داده، ورودی ما همان داده های ویکی پدیا به صورت xml است که شامل داده های کل صفحه ویکی پدیا است. هدف در این گام این است که فقط تکه ی مربوط به داده های اینفوباکس از کل این داده ها استخراج شود. خروجی این گام یک فایل xml است که شامل تمام تکه های اینفوباکس ها می باشد.

در گام بعدی باید داده ها تمیز شوند. یعنی دو مشکل حل شود.

1.     ابتدا مجموعه ای از تگ هایی که برای نمایش داده است (مانند <bold> , <br/> و...) و یا برای توضیحات اضافه است (<comment>) حذف شوند.

2.     مشکل redirection حل شود. در ویکی پدیا بعضی از صفحات به صفحات دیگری ارجاع داده می شوند. ارجاع زمانی اتفاق می افتد که برای یک موضوع واحد چندین نام وجود دارد. به عنوان مثال صفحه ای در مورد United Kingdom وجود دارد و همزمان صفحه ای به نام UK نیز در ویکی پدیا وجود دارد. در واقع UK یک نام مستعار برای نام واقعی United Kingdom است. حال یکی از وظایف ما در تمیز کردن داده ها این است که هر جایی از فایل دامپ که نام  UK را داشتیم، نام United Kingdom را جایگزین آن بکنیم.

 

حال باید در گام آخر داده های تمیز خود را به شکل 3 گانه تبدیل کنیم. همانطور که در بالا اشاره شد، ساختار یک اینفوباکس به صورت مجموعه ای زوج های خصیصه و مقدار است. در واقع داده های اینفوباکس به صورت ساخت یافته ارائه می شوند. با این توضیح و با داشتن 3 قانون زیر می توانیم تمام تبدیل ها را انجام دهیم:

1.     به ازای زوج هایی که مقداری ندارند، هیچ 3 گانه ای تولید نخواهد شد.

2.     به ازی زوج هایی که مقدار آنها یک متن یا یک لینک داخلی ویکی پدیا است، فقط یک 3 گانه تولید خواهد شد.

3.     به ازای زوج هایی که مقدار آنها، چندین متن و یا چندین لینک و یا ترکیبی از این دو است، به ازای هر مقدار آنها یک 3 گانه تولید می شود و در نهایت یک موجودیت نیز به عنوان مقدار کل تولید می شود.

در هر دو مورد 2 و 3 برای تولید 3 گانه ها به صورت زیر عمل می شود:

عنوان template اینفو باکس به عنوان subject، (نام template # خصیصه) به عنوان predicate و در نهایت مقدار خصیصه به عنوان object در نظر گرفته می شود.

نکته ای که در اینجا قابل ذکر است این است که در این روش برای ساخت قسمت predicate از ترکیب نام template و خصیصه استفاده شده است. این کار باعث می شود میزان ابهام در بازنمایی دانش کم شود در نتیجه میزان دقت افزایش پیدا خواهد کرد. برای روشن شدن بحث لطفا دو نمونه زیر را در نظر بگیرید:

<Song#length>

<UK_Bus#length>

در هر دو مورد از خصیصه ی طول صحبت می کنیم در حالی که در مورد اول منظور از طول، میزان زمان مصرفی برای یک تکه موسیقی است ولی در مورد دوم طول یک اتوبوس انگلستانی مد نظر است. در نتیجه Object متصل به predicate اول از جنس زمان و مثلا به صورت hour:minute است در حالی که در مورد دوم object مورد نیاز از جنس طول اشیاء و مثلا به صورت 4m است.

حال یک مثال را دنبال می کنیم تا از داده های خام ویکی پدیا که به صورت دامپ و به فرمت xml هستند بتوانیم، 3 گانه های مورد نظر خود را استخراج کنیم.

برای مثال در نظر بگیرید که داده های ورودی ما به صورت
 
باشند. حال این داده های به عنوان ورودی به گام 1 داده می شود و نتیجه به صورت زیر است.
 
  
حال این داده ها به گام دوم داده می شود و به عنوان مثال موارد زیر تشخیص و اصلاح می شوند:
 
 
  
 
 
 
 
 
 
 
 
و در نهایت از داده های تمیز شده ی شکل زیر به صورت زیر 3 گانه تولید می شود.
 

        <Tsing_Ma_Bridge> <Bridge#bridge_name>  "Tsing Ma Bridge“

         

        <Tsing_Ma_Bridge> <Bridge#locale> <Ma Wan Island> .

        <Tsing_Ma_Bridge> <Bridge#locale> <Tsing Yi Island> .

        <Tsing_Ma_Bridge> <Bridge#locale> "Ma Wan Island and Tsing Yi Island"

سطر آخر همان موجودیت کلی است که در گام 3 و در قانون 3 بیان شده است. همانطور که می بینید تجمیع دو مورد اخیر است که به عنوان یک مقدار رشته ای بیان شده است.

البته با توجه به اینکه ساخت 3 گانه ها در پروژه های مشابه مانند دیبی پدیا نیز وجود دارد، این روش در مقابل روش پیاده سازی دیبی پدیا به صورت زیر مقایسه می شود:
 

 

خب در این پست سعی کردم تا مطالب رو جمع کنم و به یک روش کاربردی و جالب برای ساخت گراف دانش بپردازم. امیدوارم مطالب ارائه شده برای دوستان مفید باشه و اگر نظری دارند، بنده خوشحال میشم نظرات رو داشته باشم...

ارزوی موفقیت و سلامت دارم برای همه ی عزیزان.. 

 

مراجع:

 

Chiu, Jimmy K., et al. Extraction of RDF Dataset from Wikipedia Infobox Data. Tech. rep., Department of Computer Science, The University of Hong Kong, 2010.

Lehmann, Jens, et al. "DBpedia–a large-scale, multilingual knowledge base extracted from

Wikipedia." Semantic Web 6.2 (2015): 167-195.

 


 

نگاهی جزئی تر بر ساخت گراف دانش

17:14, 06/20,2017

سلام به همه ی دوستان عزیزم. انشالله که طاعات و عباداتتون قبول درگاه حق قرار گرفته باشه و حالتون خوب باشه...

خب طبق پست قبلی که کمی با دیبی پدیا آشنا شدیم، در این پست به صورت جزئی تر بحث رو ادامه میدیم...

 

حال این گراف دانش چگونه ایجاد می شود؟ همانطور که اشاره شد، پایگاه دانش مجموعه ای از حقایق است که در فرم 3 گانه ها ارائه می شوند. در ادامه سع می کنیم تا روش ساخت این 3 گانه ها را به زبانی ساده بیان کنیم. برای این کار ابتدا باید ساختار ویکی پدیا که یکی از اصلی ترین منابع تشکیل گراف های دانش است را بررسی کنیم.

هر صفحه ویکی پدیا تقریبا ساختاری مشابه ساختار زیر دارد:

Title

Abstract

Infoboxes

Geo-coordinates

Categories

Images

Links

اما در این بین یکی از مهمترین قسمت هایی که یک صفحه ویکی پدیا دارد، قسمت infobox آن است. این تکه از صفحه معمولا در سمت راست و بالای صفحه ویکی پدیا قرار دارد که اطاعاتی را راجع به آن صفحه در قالب ساخت یافته ای در اختیار کاربر قرار می دهد. اطلاعات صفحات ویکی پدیا به صورت منظم و دوره ای به صورت dump ذخیره سازی می شوند که از طریق لینک هایی مانند https://dumps.wikimedia.org/other/static_html_dumps/

قابل دسترس هستند و با مراجعه به این لینک ها می توان فایل های دامپ ویکی پدیا را دانلود کرد. بعد از دانلود کردن این فایل ها ساختار هر صفحه ویکی پدیا را می توانیم مشاهده کنیم که مثلا اگر به صورت XML دانلود کرده باشیم، تمام اطلاعات یک صفحه در تگ page قرار می گیرد. ضمنا کل اطلاعات infobox ها نیز داخل { Infobox}} قرار می گیرد. مثلا به داده ی زیر توجه فرمایید:

{{Infobox Korean settlement

| title = Busan Metropolitan City

| img = Busan.jpg

| imgcaption = A view of the [[Geumjeong]] district in Busan

| hangul =

...

| area_km2 = 763.46

| pop = 3635389

| popyear = 2006

| mayor = Hur Nam-sik

| divs = 15 wards (Gu), 1 county (Gun)

| region = [[Yeongnam]]

| dialect = [[Gyeongsang]]

}}

در اینجا یک infobox داریم که Korean settlement را معرفی می کند و عنوان آن (title) Busan Metropolitan City است. همانطور که می بینید هر سطر از داده های اینفوباکس به صورت زوجی از خصیصه و مقدار هست. یعنی ابتدا نام خصیصه ( title) و سپس مقدار آن (Busan Metropolitan City) گفته می شود. همین روند برای سایر خطوط داده نیز وجود دارد.

دیبی پدیا یک گراف دانش فراگیر است. پس نگاهی کوتاه به دیبی پدیا نیز خواهیم داشت. حال در شکل زیر نگاهی کلی به معماری سیستم دیبی پدیا می اندازیم:

در سمت چپ داده های ویکی پدیا را داریم که به دو صورت بدست می آیند ؛ یا به صورت فایل های دامپ از پیش دانلود شده و یا به صورت داده هایی که توسط یک api از صفحات ویکی پدیا استخراج می شوند. البته برای استفاده از این api نیاز به داشتن پروتکلی برای مشخص کردن چارچوب جمع آوری فرا داده ها از روی منابع ویکی پدیا داریم که با عنوان OAI_PMH شناخته می شود. در هر صورت بعد از جمع آوری داده های ویکی پدیا، با پارس کردن داده ها به یک abstract syntax tree می رسیم. حال با توجه به اینکه این درخت عام است می توانیم تمام اطلاعات مربوط به برچسب های مورد نیاز خود را از آن استخراج کنیم. در نهایت آنها را به صورت rdf که می تواند فرمت های مختلفی از ذخیره سازی نیز داشته باشد، بر روی یک Triple Store ذخیره سازی کنیم که در اینجا با نام Virtuoso آمده است. بعد از آن می توانیم از این منبع با اجرای کوئری های اسپارکل و یا داده های پیوندی از طریق دسترسی وب که شامل (4 روش دسترسی است) استفاده کنیم. اما همانطور که در شکل نیز می بینیم، بلاکی با عنوان Ontology Mappings نیز داریم. با توجه به اینکه داده های ویکی پدیا در بیش از 120 زبان مختلف دنیا وجود دارد، لذا مشکلاتی وجود دارد که در ادامه در سناریویی درباره آن بحث می کنیم:

به شکل زیر توجه بفرمایید:

 

در این شکل در سمت چپ پایین یک template اینفوباکس را مشاهده می کنید که نام آن book است و در سمت راست پایین نیز قالب کلی برای کتاب است که به زبانی دیگر نوشته شده است. هر دو اینفوباکس به کتاب اشاره می کنند. در حالی که در آنتولوژی موجود در دیبی پدیا داریم فقط یک کلاس داریم که موجودیت کتاب را مدل می کند. این کلاس، کلاس Book است که شامل ویژگی هایی می باشد (شکل وسط صفحه بالا). حال برای آنکه اطلاعات بدست آمده از هر قالب کلی را بتوانیم به صورت یکپارچه در آنتولوژی خود داشته باشیم از نگاشت هایی استفاده می کنیم تا معلوم کنیم که اولا هر قالب کلی به کدام کلاس نگاشت می شود و ثانیا هر کدام از ویژگی های موجود در قالب ها به کدام ویژگی در کلاس نگاشت می­شود (قسمت بالاراست و بالاچپ شکل). بدین ترتیب به ازای هر زبان، یک قالب کلی برای "کتاب" داریم و یک فایل نگاشت.

اما در نهایت یکی از راه های دسترسی به پایگاه دانش ساخته شده را در شکل زیر می بینیم که در معماری سیستم نیز گفته شده بود. 

  همانطور که مشاهده می کنید از طریق آدرس وارد شده در قسمت URL به این قسمت وارد شده ­ایم و در قسمت وسط صفحه همان کوئری اسپارکل خود را می توانیم بنویسیم و در پایین، فرمت خروجی و موارد دیگر را معلوم کنیم.

 

انشالله شاد و پیروز باشین.. البته این بحث هنوز ادامه داره و در پست آینده یک راه کار جالب و علمی رو خدمتتون ارائه می کنم.

  


 

DBpedia

01:35, 06/08,2017

به نام خدا

سلام به همه دوستان !!!!

در این پست می خواهیم کمی راجع به گراف دانش دیبی پدیا صحبت کنیم. دیبی پدیا یکی از معروفترین گراف های دانش است.

طبق تعریف، دیبی پدیا یک گراف دانش است که ویژگی های زیر را دارد:

قابل فهم

رایگان برای دانلود و استفاده

باز : به این مفهوم که توسط مجامع جهانی و بزرگ می تواند گسترش یابد و ارتقا پیدا کند.

پروژه دیبی پدیا از سال 2006 شروع شد و در اکثر استفاده های ممکن، این پایگاه دانش (یا گراف دانش) به عنوان دانش پیش زمینه برای کار های دیگری مانند: رتبه بندی مستندات و فهم زبان طبیعی استفاده می شود. در حال حاضر در این پایگاه دانش، دانش به 120 زبان مختلف دنیا وجود دارد. دیبی پدیا از مجموعه ای از حقایق تشکیل شده است. در واقع از دیبی پدیا برای پاسخ به پرسش های مربوط به حقایق استفاده می شود. هر حقیقت شامل 3 جزء است:

Subject , predicate , object

مثلا جمله ی "علی لیوان را شکست" را درنظر بگیرید. این جمله یک حقیقت را نشان می دهد. در این مثال علی همان subject و شکستن لیوان همان predicate و لیوان همان object است.

دیبی پدیا مشتریان زیادی دارد که به چند نمونه آن اشاره می کنم:

شرکت های بزرگی مانند Wolters Kluwer

کتابخانه ها

محققین

توسعه دهندگان وب

 

حال کمی عمیق تر به دیبی پدیا می پردازیم:

منابع عمده دیبی پدیا از دو جا تامین می شود : ویکی پدیا و ویکی دیتا

در واقع هر صفحه در ویکی پدیا، یک منبع (resource) در دیبی پدیا محسوب می شود. مثال زیر را در نظر بگیرید:

URL روبرو را درنظر بگیرید که نشان دهنده ی یک صفحه در ویکی پدیا است. http://en.wikipedia.org/wiki/Monty_Python حال متناظر با این صفحه، منبع زیر را در دیبی پدیا داریم که با URL زیر نمایش می دهیم

http://dbpedia.org/resource/Monty_Python

 

همانطور که می دانید، ویکی پدیا یک دانشنامه آنلاین و رایگان است که مطالب آن به صورت داوطلبانه ایجاد و یا اصلاح می شود.

اما ویکی دیتا، که یک پایگاه دانش رایگان و باز است. مطالب این پایگاه دانش می تواند هم توسط انسان و هم توسط ماشین خوانده و یا نوشته شود.

اما سوال مهم در این جا این است که برای جواب دادن به سوالاتمان با وجود موتورهای جستجوی قوی که شرکت هایی مانند شرکت بزرگ گوگل ارائه داده، چه نیازی به استفاده از پایگاه دانش وجود دارد. برای جواب دادن به این سوال بهتر است مثالی واقعی ارائه دهیم:

فرض کنید می خواهیم مجموعه ای فیلم هایی را پیدا کنیم که در آنها "جان کلیز" ایفا نقش کرده است. از طرفی در این فیلم ها، اعضای گروه مانتی پایتون نباید حضور داشته باشند. برای جواب به این پرسش می توانیم کوئری زیر را در موتور جستجوی گوگل بنویسیم:

Which films starred John Cleese without any other members of Monty Python?

اما پاسخ گوگل مجموعه ای از صفحات است که هر صفحه تکه ای از اطلاعات را در خود دارد. مثلا صفحه ای که فقط راجع به گروه مانتی پایتون اطلاعاتی را در اختیار ما می گذارد و یا صفحه ای راجع به خود جان کلیز و یا صفحه ای راجع به خود فیلم  و ... . در اینجا ما (به عنوان یک عامل انسانی) با اتصال اطلاعات این چند صفحه می توانیم به پرسش خود، پاسخ دهیم. در حالی که هدف این است که این اتصال به صورت خودکار و توسط ماشین انجام شود. ضمنا نکته دیگری نیز وجود دارد: این که در جمله مورد پرسش به جای کلمه ی film میتوان از کلمات مترادف مانند movie,.. استفاده کرد. همین نکته برای سایر واژه های موجود در جمله ما نیز صادق است.

اما راه حل، استفاده از یک پایگاه دانش مانند دیبی پدیا است. البته برای استفاده از این پایگاه دانش باید گرامر مربوط به نوشتن کوئری های معتبر را بدانیم. در دیبی پدیا می توانیم کوئری SPARQL اجرا کنیم. به عنوان مثال کوئری زیر می تواند مشکل ما را حل کند! در شکل زیر در قسمت بالا کوئری مربوطه را مشاهده می کنید و در قسمت پایین خروجی حاصل از اجرای این کوئری را می بینید:

 

 

همانطور که می بینید با یک کوئری 15 خطی توانستیم مشکل را حل کنیم. البته همان طور که گفته شد، برای نوشتن این کوئری باید زبان SPARQL را  بیاموزیم.

 

در پست آینده به جزئیات بیشتری اشاره خواهیم کرد، تا در نهایت روشی را برای ساخت یک گراف دانش ارائه دهیم..

 

شاد باشید.. 


 

آنتولوژی

20:36, 03/05,2017

به نام خدا

 

سلام به همه ی دوستان!!!

 

در این پست قرار است تا با یکی از مفاهیم مهم به نام Ontology (آنتولوژی) یا هستان­ شناسی یا هستان نگار آشنا بشویم.

با توجه به پست­ های گذشته که XML را معرفی کردیم و سپس از Xpath برای استفاده از XML کمک گرفتیم، می­ توان فهمید که این دو و شمای XML و ... که معرفی شدند به تنهایی برای ایجاد معنای عمومی قایل فهم برای همگان و البته قابل فهم برای ماشین که بتواند با استفاده از آن ها، به طور خودکار استنتاج انجام دهد کافی نیستند. در واقع ما به دنبال ایجاد ساختاری با روابط بین مفاهیم آن هستیم که یک ماشین بتواند از آن استفاده کند و استنتاج خوبی را ارائه دهد. پس ما مجبور هستیم تا به سراغ امکانات دیگری برویم که قابلیت های ذکر شده را داشته باشند.

در اینجا زبانی به نام OWL معرفی می شود. با استفاده از این زبان می توانید مفاهیم، روابط بین آنها، ویژگی ها و در آخر نمونه ها را تعریف کنید. برای تعریف یک مفهوم آن را با کلید واژه کلاس می توانید بیان کنید. مثلا مفهوم موجود جاندار، مرد، گیاه و ... . روابط بین کلاس ها به دو دسته تقسیم می شوند : 1. روابط سلسله مراتبی مانند اینکه بگوییم مرد زیر کلاسی از جاندار است. 2. روابط منطقی مانند اینکه بگوییم پدر دارای فرزند است، یا اینکه بگوییم انسان از گیاه تغذیه می کند  یا بگوییم انسان با انسان دیگری دوست است. در واقع در روابط نوع اول مانند دسته بندی به کلاس ها (مفاهیم) نگاه می کنیم. مثلا می گوییم جاندار به دسته های انسان، حیوان، گیاه تقسیم می شود. سپس می گوییم انسان به زن و مرد تقسیم می شود و ... . اما در روابط منطقی، از روابطی غیر از این دسته بندی ها صحبت می کنیم. روابط از نوع 1 را با کلید واژه subClassOf معرفی می کنند.

ویژگی ها را با تگ xxxProperty نمایش می دهند که خود شامل انواعی هستند. ویژگی ها هم برای بیان روابط بین نمونه ها کاربرد دارند. انواع ویژگی ها عبارتند از

owl: ObjectProperty که خود شامل owl: SymmetricProperty و owl: TransitiveProperty می باشد.

owl: DatatypeProperty

owl: FunctionalProperty

owl:InverseFunctionalProperty

نمونه ها نیز مانند علی که نمونه ای از مرد است و همان نمونه های واقعی از کلاس ها هستند. انشالله در پست های آینده از آنتولوژی بیشتر صحبت می کنیم و برای انواع ویژگی های مطرح شده مثال خواهیم داشت.

موفق باشید...

 


 

XPath چیست؟

20:59, 02/17,2017

دوستان سلام!

در این پست می­ خواهم در ادامه مطلب قبلی خود نکاتی تکمیلی در مورد XML را بیان کنم. من می ­خواهم XPath را معرفی کنم.

Xpath یا XML Path Language همانطور که از نام آن پیداست یک زبان مسیر بر روی XML است. این زبان برای انتخاب بخشی از کل فایل XMLاستفاده می­ شود.

فرض کنید که در فایل XML خود اطلاعات زیادی را با ساختاری خاص که توسط DTD یا XSD توصیف شده است، ذخیره کرده ­اید. حال می ­خواهید از این فایل استفاده کنید. مثلا می­ خواهید بدانید که آیا رکوردی به نام آقای xxx در فایل خود  دارید یا نه؟ یا اینکه اگر فایل شما نمرات دانشجویان را در خود دارد، می خواهید ببینید کدام یک از دانشجویان در درس xxx نمره ­ی زیر 15  کسب کرده ­اند. هر کدام از دو مورد ذکر شده یک پرس و جو (query) محسوب می ­شوند.

برای پاسخ به سوالات خود نیاز به Xpath دارید تا بتوانید اطلاعات مد نظر خود را از کل فایل XML ای که در اختیار دارید استخراج کنید. یکی از دلایل استفاده از این زبان این است که با توجه به حجیم بودن فایل XML خود، نمی­ توانید به صورت دستی (manual) خودتان کل فایل را جستجو کنید. زیرا در این روش احتمال بروز خطا وجود دارد.

این زبان همانند سایر زبان­ ها دارای نحوی خاص است. در ادامه یک مثال ارائه می ­شود. اما قبل از مشاهده مثال فرض کنید یک فایل XML مانند زیر وجود دارد. این فایل حاوی دستورات آشپزی برای تعدادی غذاست. در این فایل هر غذا شامل مواد تشکیل دهنده آن و نحوه پخت آن به صورت زیر  وجود دارد.

  

حال می­ خواهید بدانید که نام اولین ماده تشکیل ­دهنده ­ی اولین غذای موجود در این فایل چیست. برای این کار باید کد زیر را بنویسید:

string(doc ("recipes.xml" )//recipe[1]/ingredient[1]/@name)

اجرای این 1 خط کد، به شما خروجی روبرو را می ­دهد:                                  "beef cube steak"  

البته امکانات Xpath بسیار زیاد است و اینجا برای سادگی به ارائه همین مثال اکتفا می­­ کنم. اما برای کاربردهای واقعی باید با توابع مختلف و همچنین نحو آن کامل آشنا شوید. برای آشنایی کامل با Xpath از لینک زیر می­ توانید استفاده کنید.

https://www.w3schools.com/xml/xml_xpath.asp

موفق باشید...

 


 

مروری بر XML

18:55, 02/10,2017
 
به نام خدا
 
در این پست مروری مختصر بر روی XML خواهیم داشت. البته در همان ابتدا این نکته را بگویم که برای به کار گیری این زبان و تسلط بر تمام امکانات موجود در آن نیاز به مطالعه دقیق منابع دیگر وجود دارد.
 
یکی از زبان های مدل سازی داده که در مباحث وب معنایی استفاده می شود، زبان  XML است. این زبان حالت نمایشی خاصی ندارد. در واقع مانند HTML رندر نمی شود. برای همین است که زبان XML را زبانی برای مدل سازی داده می شناسند.
با به کار گیری این زبان می توانیم:
1- نحوه نمایش داده را از ذخیره سازی آن جدا کنیم. یعنی خود داده را در فایل خود نگهداری کنیم و در صورت نیاز از ابزارهای دیگری برای نمایش مناسب آن استفاده کنیم.
2- برای تبادل داده بین چند سیستم استفاده کنیم.
3- حتی زبان خاصی با گرامر مورد نظر خود را توسعه دهیم! (مانند WML که سال ها پیش توسعه یافت) 
اما برای ایجاد مدلی از داده های خود نیاز به فایلی داریم تا بتوانیم قالب کلی مدل را بیان کنیم. در اینجا دو نوع زبان مطرح می شوند که به ما در ایجاد ساختار کلی مدل خود کمک می کنند. همانطور که گفته شد ما نیاز به یک فایل توصیف کننده ساختار مدل خود داریم و در نتیجه می برای اینکار کافی است یا از مورد اول و یا دوم استفاده کنیم:
 1- DTD
 2- XML Schemas که با عنوان XSD نیز شناخته می شوند.
البته مورد دوم از مورد اول قوی تر بوده و جایگزینی برای مورد اول محسوب می شود. در اینجا به ارائه دو دلیل می پردازیم:
در مورد اول نحوی غیر از آنچه در XML وجود دارد استفاده می شود که این باعث می شود تا پارسری را داشته باشیم تا بتوانیم با این فایل کار کنیم. همچنین امکانات تعریف تگ در مورد اول نسبت به مورد دوم کمتر است. 
 
شاد باشید ...  

 

سلام

22:05, 10/19,2016
سلام دوستان!!