برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

اسکریپت های سمت سرویس گیرنده در صفحات ASP.NET ( بخش دوم )

دربخش اول به ضرورت استفاده از اسکریپت های سمت سرویس گیرنده در برنامه های وب اشاره و با نحوه استفاده از اسکریپت های سمت سرویس گیرنده توسط برخی از کنترل های سرویس دهنده ASP.NET به منظور انجام وظایف از قبل تعریف شده ، آشنا شدیم . همچنین ، به این موضوع اشاره گردید که رفتار اسکریپت های سمت سرویس گیرنده در صفحات ASP.NET در برخی موارد با صفحات HTML متفاوت است :

  • اضافه کردن event handler سمت سرویس گیرنده  به کنترل های سرویس دهنده ASP.NET 

  • شناسائی و مراجعه به کنترل های سرویس دهنده از طریق اسکریپت های سمت سرویس گیرنده  

  • افزودن اسکریپت های سمت سرویس گیرنده به صفحه به صورت پویا 

  • ایجاد رویداد کلیک سمت سرویس گیرنده برای کنترل های سرویس دهنده 

  • اشتراک اطلاعات بین اسکریپت های سمت سرویس گیرنده و کدهای سمت سرویس دهنده

  • فراخوانی کدهای سمت سرویس دهنده از طریق اسکریپت های سمت سرویس گیرنده بدون نیاز به postback

 در این بخش به بررسی موارد اول و دوم مورد خواهیم پرداخت .

اضافه کردن event handler سمت سرویس گیرنده به کنترل های سرویس دهنده ASP.NET 
با توجه به این که با کنترل های سرویس دهنده ASP.NET در یک صفحه به عنوان element  برخورد می شود (نوع عنصر تفسیر شده توسط یک کنترل به زبان نشانه گذاری استفاده شده در یک صفحه بستگی دارد : HTML ، XHTML و یا ... ) ، می توان اسکریپت های سمت سرویس گیرنده event handler را به کنترل ها همانند سایر عناصر موجود در صفحه اضافه نمود . توجه به این موضوع که کنترل چگونه خروجی خود را تفسیر می نماید و کدام خصلت را برای خود رزو نموده است ، حائز اهمیت است .

افزودن event handler سمت سرویس گیرنده به صورت تعریفی
از طریق تگ های کنترل های سرویس دهنده ASP.NET ، می توان با استفاده از Attributes مقادیر مورد نظر خصلت ها را مشخص نمود . مثلا"  برای مقداردهی خصلت Text کنترل TextBox ، می توان از تگ زیر استفاده نمود :

<asp:textbox id="TextBox1" runat="server" text="Sample Text" />

در صورتی که از یک attribute استفاده گردد  که نتوان آن را به یک خصلت خاص map نمود ، ASP.NET  در زمان پردازش سمت سرویس دهنده از آن صرفنظر نموده و آن را  به عنوان as-is به همراه سایر تگ های HTML تولید شده برای کنترل سرویس دهنده به مقصد مرورگر ارسال می نماید . مثلا" کنترل TextBox دارای خصلتی با نام onKeyup  نمی باشد . بنابراین در صورتی که به همراه کنترل TextBox از خصلت فوق استفاده گردد ، ASP.NET بدون انجام هیچگونه واکنشی آن را برای مرورگر سرویس گیرنده ارسال می نماید . با توجه به نحوه برخورد ASP.NET با اینچنین خصلت  هائی ، می توان رویدادهآی مورد نظر را به کنترل های سرویس دهنده و از طریق تعریف تگ های مربوطه نسبت داد .
کد زیر نحوه استفاده از یک event handler سمت سرویس گیرنده به همراه کنترل سرویس دهنده  TextBox را نشان می دهد . پس از درج هر حرف در TextBox ( بروز رویداد )  ، طول آن در یک عنصر span با نام spanCounter نمایش داده می شود ( event handler  ) .

<%@ Page Language="VB"%>
<html>
<head >
<title>تست یک </title>
</head>
<body>
<form id="form1" runat="server">
    <asp:textbox id="TextBox1" runat="server" text="Sample Text"
     onkeyup="spanCounter.innerText=this.value.length;" />
   <Span id="spanCounter" />
</form>
</body>
</html>

در صورت ضرورت می توان event handler سمت سرویس گیرنده را در قالب یک تابع سازماندهی تا پس از بروز رویداد ( فشردن یک کلید ) مرتبط با یک کنترل سرویس دهنده ، فعال و وظایف خود را انجام دهد . 

<%@ Page Language="VB"%>
<html>
<head  >
<title>تست دو </title>
<script type="text/javascript">
  function DisplayCount(a)
    {
       spanCounter.innerText=a.value.length;
    }
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:textbox id="TextBox1" runat="server" text="Sample Text"
         onkeyup="DisplayCount(this);" />
<Span id="spanCounter" />
</form></body></html>

افزودن یک event handler  سمت سرویس گیرنده از طریق برنامه و در زمان اجراء
در صورت ضرورت می توان event handler  سمت سرویس گیرنده را از طریق برنامه و در زمان اجراء به یک کنترل سرویس دهنده ASP.NET اضافه نمود . استفاده از ویژگی فوق در مواردی مفید است که رویداد و یا کد مرتبط با آن به اطلاعاتی نیاز دارند که صرفا" در زمان اجراء قابل دسترسی است . در چنین مواردی می توان از رویداده Load و یا Init صفحه به منظور اضافه کردن خصلت مورد نظر به یک کنترل استفاده نمود (استفاده از متد Add ) .
کد زیر نحوه اضافه کردن یک خصلت به یک کنترل سرویس دهنده در زمان اجراء و به منظور اجرای‌ یک event handler را نشان می دهد .  اسکریپت سمت سرویس گیرنده طول متن تایپ شده در کنترل TextBox را در هر لحظه نمایش می دهد . در اسکریپت فوق ،فرض شده است که صفحه دارای یک عنصر span با نام spanCounter  است .

<%@ Page Language="VB"%>
<html>
<head >
<title>تست سه </title>
<Script RunAt="Server">
 
  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
      Dim displayControlName As String = "spanCounter"
      TextBox1.Attributes.Add("onkeyup", _
       displayControlName & ".innerText=this.value.length;")
End Sub
</Script>

</head>
<body>
<form id="form1" runat="server">
<asp:textbox id="TextBox1" runat="server" text="Sample Text" />
<Span id="spanCounter" />
</form></body></html>

 

افزودن یک رویداد onClick سمت سرویس گیرنده به کنترل سرویس دهنده Button
با کلیک بر روی کنترل سرویس دهنده button  بلافاصله و به صورت پیش فرض  یک postback اتفاق می افتد تا event handler مرتبط با آن در سمت سرویس دهنده اجراء گردد . در صورت ضرورت می توان از خصلت OnClientClick  کنترل Button ( کنترل هائی نظیر Button , LinkButton  و ImageButton ) ، به منظور معرفی یک event handler استفاده نمود تا پس از کلیک بر روی button ، درابتدا event handler سمت سرویس گیرنده اجراء گردد و در ادامه عملیات postback انجام شود .
کد زیر نحوه اضافه کردن یک رویداد کلیک سمت سرویس گیرنده به  کنترل Button  را نشان می دهد . پس از کلیک بر روی Button یک پیام ارائه و در صورت تائید ، اطلاعات برای سرویس دهنده ارسال می گردد . ( با کلیک اول ، از یک روتین سمت سرویس گیرنده پرای پاسخگوئی به آْن استفاده می شود و پس از کلیک مجدد بر روی Button نمایش داده شده در جعبه محاوره ای ، اطلاعات برای سرویس دهنده ارسال تا متناسب با شرایط برنامه با آنان برخورد شود) .

<%@ Page Language="VB" %>
<script runat="server">
   Sub Button1_Click(ByVal sender As Object,ByVal e As System.EventArgs)
    Label1.Text = "Server click handler called."
   End Sub
</script>

<body>
<form id="form1" runat="server">
    <asp:Button ID="Button1" Runat="server"
         OnClick="Button1_Click"
         OnClientClick="return confirm('Ready to submit.')"
         Text="Test Client Click" />
       <br />
      <asp:Label ID="Label1" Runat="server" text="" />
</form>
</body>
</html>

شناسائی و مراجعه به کنترل های سرویس دهنده از طریق اسکریپت های سمت سرویس گیرنده
زمانی که یک کنترل سرویس دهنده ASP.NET تفسیر می گردد ، خصلت ClientID آن در بردارنده خصلت های Id و name عنصر تولید شده است . ( خصلت ClientID به صورت اتوماتیک و همزمان با مقداردهی به خصلت ID مقدار لازم را خواهد گرفت ) . فرض کنید با استفاده از نمونه کد زیر ، یک کنترل سرویس دهنده ASP.NET را ایجاد کرده باشیم :

 <asp:textbox id="TextBox1" runat="server" text="Sample Text" />

خصلت ClientID ، مقدار TextBox1 را خواهد گرفت و در نهایت نتایج تولید شده زیر برای یک مرورگر مبتنی بر HTML  ارسال می گردد :

<input name="TextBox1" type="text" value="Sample Text" id="TextBox1" />

بنابراین ، به منظور دستیابی به یک کنترل سرویس دهنده ASP.NET از طریق اسکریپت های سمت سرویس گیرنده ، می توان از خصلت های Id و name استفاده نمود . برای آدرس دهی یک کنترل سرویس دهنده ASP.NET توسط اسکریپت های سمت سرویس گیرنده ، می توان از نام کامل  آن نیز استفاده نمود  ( fully qualified reference  ). در صورتی که کنترل سرویس دهنده فرزند عنصر form در صفحه باشد ، می توان از گرامر زیر به منظور مراجعه به کنترل در اسکریپت های سمت سرویس گیرنده استفاده نمود .

<document.forms[0].TextBox1.value = "New value";

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

مراجعه به کنترل ها ئی که درون سایر کنترل ها قرار دارند
برخی کنترل ها ، کنترل های فرزند را درون صفحه تفسیر می نمایند . کنترل های GridView, DetailsView, FormView, DataList , Repeater , user controls و Web Parts نمونه هائی در این زمینه می باشند . در چنین مواردی ، کنترل فرزند ممکن است دارای یک ID منحصربفرد نباشد چراکه کنترل های فرزند در تمپلیتی تعریف شده اند که برای‌ هر سطر نمونه ، کنترل های جدیدی تولید  و یا ممکن است کنترل parent از طریق یک منبع خارجی به صفحه اضافه شده باشد ( نظیر کنترل های Web part و user ) .  کنترل های parent به منزله naming containers می‌باشند (توسط INamingContainer پیاده سازی شده اند ). یک naming containers  منحصربفرد بودن IDs کنترل های فرزند را تضمین می نماید .
مثلا" می توان یک خصلت ItemTemplate را در کنترل DataList ایجاد و یک کنترل Checkbox را به آن اضافه نمود که مقدار ID آن CheckEnabled در نظر گرفته شده باشد . در زمان تفسیر کنترل DataList ، یک کنترل جدید CheckEnabled برای هر آیتم داده در نظر گرفته می شود . صفحه تفسیر شده نمی بایست شامل چندین نمونه از یک عنصر با نام CheckEnabled باشد ، بنابراین کنترل DataList یک شناسه منحصربفرد برای‌هر یک از کنترل های فرزند خود ایجاد  می نماید .
شناسه های منحصربفرد برای کنترل های فرزند یک naming container با بررسی دو خصلت تولید می گردند . برای هر کنترل فرزند :

  • خصلت UniqueID کنترل به عنوان خصلت name در نظر گرفته می شود .

  • خصلت ClientID کنترل به عنوان خصلت Id  در نظر گرفته می شود .

هم ClientID و هم UniqueID بر اساس خصلت ID  اولیه تولید می گردند تا  اطلاعات لازم به منظور تضمین منحصربفرد بودن نتایج در یک صفحه تامین گردد .از مقدار ClientID که در واقع ID عنصر تفسیر شده است ، می توان  در اسکریپت های سمت سرویس گیرنده استفاده نمود . پس از اجرای یک صفحه حاوی یک  naming container  و مشاهده Source آن ، می توان ID تولید شده برای هر یک از کنترل های فرزند را مشاهده نمود .
در بخش سوم به بررسی سایر موارد خواهیم پرداخت .

اسکریپت های سمت سرویس گیرنده در صفحات ASP.NET ( بخش اول )

برنامه های وب یکی از مهمترین دستاوردهای اخیر در صنعت نرم افزار می باشند که علل آن را می بایست در تاثیر اینترنت بر دنیای گسترده نرم افزار جستجو کرد  . آشنائی با معماری برنامه های وب و بکارگیری فن آوری های متعدد با توجه به ساختار  این نوع برنامه های کامپیوتری برای تمامی پیاده کنندگان علاقه مند حضور موثر و مستمر در این عرصه ، امری لازم و ضروری است .
برنامه های‌ وب دارای سه ویژگی مهم و برجسته می باشند :
  • مبتنی بر وب می باشند ( Web-based )
  • از معماری‌ سرویس گیرنده - سرویس دهنده Three tire استفاده می نمایند .
  • سیستم های پردازش اطلاعات می باشند ( در مقابل سیستم های عرضه اطلاعات )

با توجه به موضوع این مقاله اجازه دهید بر روی ویژگی دوم متمرکز شده و با آن بیشتر آشنا شویم .
واژه  "سرویس گیرنده - سرویس دهنده " نشاندهنده این واقعیت است که از شبکه های مبتنی ‌بر سرویس دهندگان به منظور مدیریت اشتراک منابع استفاده می گردد . برای توزیع پردازش از پتانسیل های سخت افزار‌ی و نرم افزاری سرویس دهندگان و سرویس گیرندگان استفاده می گردد و هر یک دارای سهمی در کل پردازش می باشند ( گرچه در توزیع سهم پردازش ، عدالت به درستی رعایت نشده باشد ) .
با توجه به رویکرد فوق، پیاده کنندگان برنامه های وب می توانند به منظور تامین خواسته های یک برنامه از پتانسیل های پردازش سمت سرویس دهنده و یا سمت سرویس گیرنده استفاده نمایند . برای تحقق پردازش های سمت سرویس دهنده و سرویس گیرنده از فن آوری های متعددی استفاده می گردد .
ASP.NET ، یک فن آوری سمت سرویس دهنده است و نمی تواند  مستقیما" با مرورگر تعامل و یا ارتباط داشته باشد .به عنوان نمونه ، در ASP.NET  مکانیزمی وجود ندارد که بتوان با استفاده از آن داده تایپ شده از طریق صفحه کلید توسط کاربر در برنامه مرورگر را دریافت ، به رویدادهای موس پاسخ و عملیاتی را انجام داد که مستلزم تعامل مستقیم با کاربر می باشند . ASP.NET صرفا" می تواند نتایج اینچنین تعاملاتی را پس از ارسال صفحه مشاهده و از آنان استفاده نماید و قادر به پاسخگوئی مستقیم به رویدادهای ایجاد شده در سطح مرورگر نمی باشد .
به منظور برخورد و مدیریت تعامل با مرورگر و رویدادهای محقق شده در آن سطح ، بهترین گزینه استفاده از اسکریپت های سمت سرویس گیرنده است که توسط یکی از زبان های اسکریپت نویسی نظیر جاوااسکریپت نوشته می گردند . اسکریپت های سمت سرویس گیرنده در مرورگر اجراء شده و می توانند بلافاصله نسبت به عملیات انجام شده توسط کاربر از خود واکنش نشان دهند . مثلا" با استفاده از اسکریپت های سمت سرویس گیرنده می توان یک افکت rollover را ایجاد و یا واکنش مناسبی را در زمان حرکت موس بر روی یک button و یا یک آیتم خاص موجود در منو انجام داد .
اسکریپت های سمت سرویس گیرنده توان عملیاتی پیاده کنندگان را به منظور برخورد با رویدادهائی که در سطح لایه رابط کاربر محقق می شوند و لازم است که بلافاصله به آنان پاسخ داده شود ، افزایش می دهد .

کنترل های سرویس دهنده ASP.NET و اسکریپت های سمت سرویس گیرنده
تعدادی از کنترل های سرویس دهنده ASP.NET  به منظور انجام وظایف از قبل تعریف شده خود نیازمند استفاده از اسکریپت های سمت سرویس گیرنده می باشند . به عنوان نمونه کنترل LinkButton  برای انجام فرآیند Postback نیازمند استفاده از اسکریپت های سمت سرویس گیرنده است . کد زیرنحوه استفاده ازکنترل LinkButton را نشان می دهد . ( پس از کلیک بر روی آن یک متن در کنترل label نمایش داده می شود) .

<%@ Page Language="VB" AutoEventWireup="True" %>

<script language="VB" runat="server">
     Sub LinkButton_Click(sender As Object, e As EventArgs)
         Label1.Text = "You clicked the link button"
      End Sub
</script>


<html>
<body>
<form runat=server>
<h3>LinkButton Example</h3>
<asp:LinkButton id="LinkButton1"
       Text="Test LinkButton"
       Font-Name="Tahoma"
       Font-Size="14pt"
       OnClick="LinkButton_Click"
        runat="server"/>
<p>
<asp:Label id=Label1 runat=server />
</form></body></html>

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

  • کنترل های Page .HtmlForm و Panel : خصلت های DefaultFocus ، DefaultButton و MaintainScrollPositionOnPostback نیازمند استفاده از اسکریپت های سمت سرویس گیرنده می باشند .

  • کنترل های LinkButton, ImageButton و HtmlButton  از اسکریت های سمت سرویس گیرنده به منظور حمایت از رویداد Postback استفاده می نمایند. توجه داشته باشید که کنترل های Button Web server control، HtmlInputButton و HtmlInputImage به اسکریت های سمت سرویس گیرنده نیاز ندارند .

  • Calendar : کنترل فوق از کنترل LinkButton به منظور پیاده سازی حرکت در بین روز ، هفته و ماه استفاده می نماید . کنترل LinkButton از اسکریپت های سمت سرویس گیرنده برای رویداد postback استفاده می نماید . در صورتی که از کنترل calendar صرفا" به منظور نمایش یک ماه بدون امکان انتخاب و یا حرکت استفاده می گردد ، کنترل فوق نیازی به استفاده از اسکریت هآی سمت سرویس گیرنده ندارد .

  • DetailsView : در صورتی که کنترل شامل دکمه هائی باشد که به عنوان کنترل های LinkButton پیکربندی شده باشند ( برای ویرایش ، paging و ...)، به منظور انجام عملیات فوق از اسکریپت های سمت سرویس گیرنده استفاده می گردد . در صورتی که خصلت EnablePagingCallbacks فعال و مقدار آن True باشد ، از اسکریپت های سمت سرویس گیرنده به منظور مدیریت callback استفاده می گردد . 

  • GridView : در صورتی که کنترل شامل دکمه هائی است که به عنوان کنترل های LinkButton پیکربندی شده باشند ( برای ویرایش ، paging و ...) ، به منظور انجام عملیات فوق از اسکریپت های سمت سرویس گیرنده استفاده می گردد .  از اسکریپت های سمت سرویس گیرنده به منظور مرتب سازی و paging استفاده می گردد (در صورت حمایت کنترل منبع داده مرتبط با آن ). در صورتی که خصلت EnablePagingCallbacks فعال و مقدار آن True باشد ، از اسکریپت های سمت سرویس گیرنده به منظور مدیریت callback استفاده می گردد .

  • Label : خصلت  AssociatedControlID به همراه خصلت AccessKey اسکریپت های سمت سرویس دهنده ای را در پاسخ به keyboard shortcut  تولید می نمایند. در صورتی که خصلت های فوق مقداردهی نشده باشند ، کنترل Label  نیازی به استفاده از اسکریپت های سمت سرویس گیرنده ندارد .

  • Menu: از اسکریپت های سمت سرویس گیرنده برای باز وبستن آیتم های منو ، نمایش پانل های pop-out و کنترل نمایش زمانی که کاربر اشاره گر موس را بر روی آیتم های موجود در منو قرار می دهد ، استفاده می گردد . 

  • TreeView ، از اسکریپت های سمت سرویس گیرنده به منظور باز و بستن گره ها استفاده می نماید .

  • هر نوع کنترل سرویس دهنده ای که خصلت PostBack آن true باشد : رفتار خصلت AutoPostBack برای کنترل های غیر button  با استفاده از اسکریپت های سمت سرویس گیرنده پیاده سازی می گردد .

  • کنترل های Web Part از اسکریپت های سمت سرویس گیرنده به منظور حمایت از  Drag-and-drop ، افزودن کنترل های Web part به Zones و Verbs و صدور و یا ورود توانمندی ها استفاده می گردد .

  • کنترل های Validator ( شامل CompareValidator، CustomValidator ، RangeValidator ، RegularExpressionValidator ، RequiredFieldValidator ) ، از اسکریت های سمت سرویس گیرنده به منظور ارائه پاسخ فوری پس از بررسی اعتبار داده استفاده می نمایند. در صورتی که سرویس گیرنده از اسکریپت حمایت نمی نماید ، validation صرفا" بر روی سرویس دهنده اجراء خواهد شد .

  • هر متد و یا خصلتی که بر روی کنترل ها focus می نماید ، نظیر متد Focus بر روی کنترل ها و متد SetFocus صفحه : از اسکریپت های سمت سرویس گیرنده به منظور تنظیم focus بر روی کنترل مورد نظر استفاده می گردد .

اسکریت های سمت سرویس گیرنده مورد نیاز برای هر یک از کنترل ها و اعضاء به صورت اتوماتیک تولید و به همراه صفحه ارسال می گردد .
در برخی موارد ممکن است کاربران امکان استفاده از اسکریپت را در مرورگر خود غیرفعال نمایند ( اقدامی در جهت افزایش ایمنی سیستم ) . در صورت انجام این کار  ، نمی توان از پتانسیل های ارائه شده توسط اسکریپت های سمت سرویس گیرنده استفاده نمود و بدیهی است که برخی کنترل ها نظیر کنترل LinkButton ، بطور کامل از کار بیافتد و یا قابلیت های خصلت AutoPostBack غیرفعال گردد . برخی کنترل ها از وضعیت فوق کمتر متاثر شده و در شرایط خاصی می توانند عملیات خود را انجام دهند . مثلا" کنترل های Validation می توانند در صورت بروز مشکل در خصوص اجرای اسکریپت های سمت سرویس گیرنده ، آنان را سمت سرویس دهنده اجراء نمایند ( با این تفاوت که به دلیل اجرای آنان بر روی سرویس دهنده به کاربر سریعا" پاسخ داده نمی شود ) .

 استفاده از اسکریپت های سمت سرویس گیرنده  توسط پیاده کننده در صفحات ASP.NET
با توجه به این که رفتار صفحات ASP.NET در برخی موارد مشابه صفحات HTML است ، می توان اسکریپت های سمت سرویس گیرنده خود را به صفحات ASP.NET اضافه نمود . در صفحات ASP.NET از اسکریپت های سمت سرویس گیرنده به منظور پاسخ به رویدادهای محقق شده در سطح لایه رابط کاربر، حمایت می گردد . استفاده از اسکریپت های سمت سرویس گیرنده در یک صفحه ASP.NET  همانند سایر صفحات HTML است . با افزودن یک بلاک script به صفحه امکان نوشتن اسکریپت های سمت سرویس گیرنده فراهم می گردد . پیاده کنندگان می توانند از اسکریپت های سمت سرویس گیرنده به منظور نوشتن event handler به منظور پاسخ به رویدادهای محقق شده در سمت سرویس گیرنده نظیر رویداد onload صفحه نیز استفاده نمایند . زمانی که یک صفحه ASP.NET در مرورگر اجراء می گردد ، با استفاده از اسکریپت های سمت سرویس گیرنده می توان عناصر موجود بر روی صفحه را آدرس دهی و متناسب با رویداد محقق شده ، مدیریت آنان را در سمت سرویس گیرنده برعهده گرفت .
استفاده از اسکریپت های سمت سرویس گیرنده در صفحات ASP.NET نسبت به صفحات HTML در برخی موارد متفاوت است :

  • اضافه کردن event handler سمت سرویس گیرنده  به کنترل های سرویس دهنده ASP.NET 

  • مراجعه به کنترل های سرویس دهنده از طریق اسکریپت های سمت سرویس گیرنده 

  • افزودن اسکریپت های سمت سرویس گیرنده به صفحه به صورت پویا 

  • ایجاد رویداد کلیک سمت سرویس گیرنده برای کنترل های سرویس دهنده 

  • اشتراک اطلاعات بین اسکریپت های سمت سرویس گیرنده و کدهای سمت سرویس دهنده

  • فراخوانی کدهای سمت سرویس دهنده از طریق اسکریپت های سمت سرویس گیرنده بدون نیاز به postback

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

سرویس های Membership و Roles در ASP.NET 2.0 ( بخش دوم )

در بخش اول به امکانات  ASP کلاسیک ، ASP.NET 1.x و ASP.NET 2.0 در خصوص تائید و اعطاء مجوزهای لازم به کاربران به منظور استفاده از تمام و یا بخش هائی خاص از یک وب سایت اشاره گردید . در این بخش به بررسی  سرویس جدید membership در ASP.NET 2.0 و نحوه استفاده از آن در برنامه های وب خواهیم پرداخت . قبل از هر چیز اجازه دهید مجددا" این نکته را یادآور شویم که فرآیند Authentication در ASP.NET 2.0 از طریق سرویس membership  و فرآیند Authorization از طریق سرویس Roles انجام می شود.

تائید کاربران در ASP.NET 2.0
ASP.NET 2.0 ، سرویس membership را به منظور تائید کاربران جهت دستیابی به تمام صفحات و یا صفحاتی خاص از یک وب سایت ارائه نموده است . سرویس فوق ، علاوه بر ارائه یک API جدید برای مدیریت کاربران ، کنترل های سرویس دهنده جدیدی را به منظور پیاده سازی فرآیند تائید در اختیار پیاده کنندگان قرار می دهد.

چگونه می توان از سرویس membership استفاده نمود ؟
قبل از این که بتوان از کنترل های سرویس دهنده امنیتی استفاده نمود ، می بایست در ابتدا پیکربندی برنامه را بگونه ای انجام داد که امکان استفاده از سرویس  membership فراهم گردد .
به صورت پیش فرض ، ASP.NET 2.0 از AspNetSqlProvider برای ذخیره جزئیات اطلاعات مربوط به کاربران ریجستر شده استفاده می نماید .
یکی از دستاوردهای مهم   ASP.NET 2.0  ، ارائه یک data provider model است که مسئولیت جزئیات عملیات مدیریتی مورد نیاز برای ارتباط با چندین نوع منبع داده را برعهده می گیرند .
شکل زیر ، سرویس جدید membership در ASP.NET 2.0 را نشان می دهد .


منبع : سایت مایکروسافت

همانگونه که در شکل فوق مشاهده می نمائید ، Membership provider  ( همانند سایر ASP.NET 2.0 Provider models  ) قادر به دستیابی مجموعه ای گسترده از منابع داده است . در شکل فوق ، صرفا" منبع داده SQL Server ( گزینه پیش فرض ) نشان داده شده است . پیاده کنندگان می توانند در صورت تمایل اقدام به پیاده سازی  membership provider اختصاصی خود نموده تا به کمک آن با سایر منابع داده ارتباط برقرار نمایند . در شکل فوق ، همچنین مجموعه ای از کنترل های سرویس دهنده امنیتی که امکان دستیابی به Provider model برای پیاده سازی فرآیند تائید کاربران را فراهم می نمایند ، مشاهده می گردد .

افزودن عنصر <authentication> در فایل web.config
برای استفاده از تائید کاربران مبتنی بر فرم در یک برنامه وب جهت بکارگیری سرویس جدید membership ، اولین مرحله فعال کردن ویژگی فوق از طریق فایل web.config است . در صورت عدم وجود فایل web.config ، در ابتدا آن را ایجاد و بخش زیر را به آن اضافه می نمائیم :

<?xml version=?1.0? encoding="utf-8" ?>
   <configuration>
     <system.web>
        <authentication mode="Forms" />
     </system.web>
    </configuration>

با اضافه کردن عنصر <authentication> به فایل web.config ، امکان استفاده از تمامی پتانسیل های سرویس membership ارائه شده توسط ASP.NET 2.0 فراهم می گردد . بدین منظور می بایست مقدار خصلت mode ، معادل Forms در نظر گرفته شود ( خصلت فوق می تواند مقادیر دیگری نظیر  windows ,passport و None را داشته باشد ) .

افزودن عنصر <forms> به فایل web.config
استفاده از تائید مبتنی بر فرم ، کاربران را ملزم به درج نام و رمز عبور خود در یک فرم خاص می نماید . زمانی که یک کاربر قصد دستیابی به یک وب سایت را داشته باشد ، در ابتدا وی به صورت یک کاربر ناشناس ( anonymous ) وارد سایت می گردد . در صورتی که تشخیص داده شود که  کاربر ناشناس است ، ASP.NET  وی را به یک صفحه خاص login هدایت می نماید . پس از درج نام و رمز عبور و تائید هویت کاربر ، برای وی یک HTTP cookie ایجاد که از آن در درخواست های آتی استفاده می گردد . کد زیر نحوه تعریف یک فرم در فایل web.config را نشان می دهد .

<?xml version=?1.0? encoding="utf-8" ?>
    <configuration>
       <system.web>
          <authentication mode="Forms">
               <forms name=".ASPXAUTH"
                   loginUrl="login.aspx"
                   protection="All"
                   timeout="30"
                   path="/"
                   requireSSL="false"
                   slidingExpiration="true"
                   cookieless="useDeviceProfile" />

           </authentication>
     </system.web>
   </configuration>

 توضیحات :  

  •  عنصر <forms>  می بایست درون عنصر <authentication> تعریف گردد.

  • خصلت name ، نام کوکی ارسالی برای کاربران تائید شده را مشخص می نماید . نام کوکی به صورت پیش فرض ، ASPXAUTH . در نظر گرفته می شود .

  • loginUrl ، صفحه login را مشخص می نماید . ( در صورتی که کوکی با نام ASPZAUTH . و یا هر نام دیگری پیدا نشود ) . به صورت پیش فرض مقدار این خصلت login.aspx در نظر گرفته می شود .

  •  Protection ، میزان حفاظت اعمال شده در خصوص کوکی ذخیره شده بر روی ماشین کاربر  را مشخص می نماید . خصلت فوق می تواند یکی از مقادیر   All ,None , Encryption و Validation را دارا باشد که معمولا" از گزینه All استفاده می گردد .

  • timeout ،  مدت زمان حیات یک کوکی را مشخص می نماید ( بر حسب دقیقه ) . مقدار پیش فرض سی دقیقه است .

  • Path ، مسیر ذخیره کوکی را مشخص می نماید .

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

  • slidingExpiration ، مدت زمان timeout کوکی را در یک sliding scale مشخص می نماید. با توجه به این که مقدار گزینه فوق به صورت پیش فرض True در نظر گرفته می شود، کوکی ایجاد شده بر روی ماشین کاربر سی  دقیقه ( مقدار مشخص شده توسط خصلت timeout ) پس از آخرین درخواست اعتبار خواهد داشت . در صورتی که مقدار خصلت فوق False در نظر گرفته شود ، اعتبار کوکی پس از گذشت سی دقیقه از اولین درخواست به اتمام خواهد رسید .

  • cookieless ، نحوه مدیریت کوکی توسط ASP.NET را مشخص می نماید . خصلت فوق می تواند یکی از مقادیر  useDeviceProfile , UseCookies ,auto ،  useUrl را دارا باشد . مقدار پیش فرض ، useDeviceProfile در نظر گرفته می شود و نحوه مدیریت کوکی بر اساس user agent دستگاه سرویس گیرنده انجام خواهد شد . 

 محل ذخیره اطلاعات کاربران در سرویس membership
SqlMemberShipProvider ، یکی از دو Membership Provider است که به همراه ASP.NET 2.0 ارائه شده است و از یک بانک اطلاعاتی SQL Server به منظور ذخیره اطلاعات کاربران استفاده می نماید . به منظور استفاده از Provider فوق ، می بایست یک DataBase schema ایجاد تا در ادامه provider  بتواند از آن استفاده نماید . به منظور انجام این کار می توان از دو روش زیر استفاده نمود :

  • استفاده از ابزار مدیریت ASP.NET website : با استفاده از ابزار فوق یک database schema در یک فایل SQL server 2005 ( فایل ASPNETDB.mdf ) و در فولدر App_Data ایجاد می گردد .

  • استفاده از ابزار خط دستوری ASP.NET SQL Server Registration tool ( فایل aspnet_regsql.exe )

برای استفاده از ابزار مدیریت ASP.NET website  ، پس از اجرای ویژوال استودیو دات نت 2005 ، از طریق منوی Website گزینه ASP.NET configuration را انتخاب می نمائیم . در ادامه و از طریق Security Tab ، نوع authentication را به "From internet" تغییر می دهیم . مراحل فوق را می توان از طریق لینک موجود در Authentication box و یا توسط Security Setup Wizard و دنبال نمودن مراحل مربوطه ، انجام داد . 


 ابزار مدیریت ASP.NET website 



با انجام مراحل فوق ، به صورت اتوماتیک یک بانک اطلاعاتی با نام ASPNETDB.mdf در فولدر App_Date ایجاد که دارای ساختار از قبل تعریف شده ای است . 


ایجاد بانک اطلاعاتی ASPNETDB.mdf

در مواردی که از ابزار مدیریت وب سایت برای مشخص کردن نوع authentication  ، به "From internet" استفاده می گردد، خط زیر به فایل web.config اضافه می گردد  :

<?xml version=?1.0? encoding="utf-8" ?>
   ...
        <authentication mode="Forms" />
   ...

در صورتی که لازم است اطلاعات کاربران را در مکانی دیگر ذخیره نمود ( در یک بانک SQL Server 2000 و یا یک بانک SQL Server 2005 که در فولدر App_data موجود نمی باشد ) ، می بایست از ابزار aspnet_regsql.exe استفاده نمود .
در صورتی که ایجاد Schema از طریق ASP.NET SQL Server Registration tools انجام شود ، می بایست  عبارت اشاره شده به صورت دستی در فایل web.config اضافه گردد  . در صورتی که Schema در یک بانک اطلاعاتی دیگر غیر از ASPNETDB.mdf و فولدر App_Data باشد ، لازم است که پیکربندی membership را در فایل web.config سفارشی و connection string مربوطه را مشخص نمود .
SqlMemberShipProvider اطلاعات مربوط به کاربران را در دو جدول زیر ذخیره می نماید :

  • aspnet_users ، برای هر user account دارای یک سطر است که اطلاعات پایه را نگهداری می نماید . ستون UserID به صورت منحصربفرد هر کاربر را در سیستم مشخص و به صورت یک  uniqueidentifier ذخیره می نماید ( یک GUID ) .

  • aspnet_membership  ، دارای یک ستون UserId است که هر رکورد را به یک رکورد خاص در aspnet_membership مرتبط می نماید. جدول فوق ، اطلاعات مرتبط با هر account نظیر email,password و سایر موارد را در خود ذخیره می نماید .


ساختار بانک اطلاعاتی ASPNETDB.mdf

سفارشی نمودن SqlMembershipProvider
در صورت استفاده از SqlMembershipProvider با تنظمیات پیش فرض (اطلاعات مربوط به کاربران در فایل ASPNETDB.mdf  سرویس دهنده SQL 2005 و درفولدر App_Data ذخیره می گردد ) ، ضرورتی به اعمال تغییرات در فایل  web.config نمی باشد. در غیر اینصورت ، می بایست از  تائیدیه مبتنی بر فرم استفاده شود و قوانین لازم جهت مجوزها نیز مشخص گردد .
در صورتی که قصد استفاده از یک بانک اطلاعاتی دیگر را داشته باشیم و یا بخواهیم برخی تنظمیات memebership را تغییر دهیم ( حداقل طول رمز عبور ، نحوه ذخیره رمز عبور به صورت plain text ، hashed و یا رمزشده  و ... ) ، می بایست تنظمیات سفارشی را در فایل web.config ثبت نمود .
نمونه کد  زیر نحوه سفارشی نمودن تنظیمات MemeberShipProvider را نشان می دهد .

<configuration>
  <connectionStrings>
     <add name="MyDB" connectionString="..." />
   </connectionStrings>
  <system.web>  
      <membership defaultProvider="CustomizedProvider">
         <providers>
             <add name="CustomizedProvider"
                     type="System.Web.Security.SqlMembershipProvider"
                     connectionStringName="MyDB"
                     minRequiredPasswordLength="5"
                     minRequiredNonalphanumericCharacters="0" />
      </providers>

   </membership>
  </system.web>
</configuration>

در <membership> ، یک provider جدید با نام CustomizedProvider تعریف تا membership provider پیش فرض را ایجاد می نماید . provider سفارشی فوق ، همچنان از SqlMemberShipProvider استفاده می نماید و صرفا" برخی مقادیر مربوطه سفارشی شده است .
پس از پیکربندی ASP.NET website ، جهت استفاده از سیستم Membership می توان مدیریت کاربران سایت را از طریق ابزار مدیریت وب سایت ASP.NET انجام داد . پس از فعال شدن برنامه فوق با استفاده از Security tab و کلیک بر روی لینک Create User می توان یک کاربر جدید را ایجاد و یا از طریق لینک manage users اقدام به ویرایش و یا حذف رکوردهای موجود کاربران نمود . 
در بخش سوم با نحوه استفاده از برخی کنترل های امنیتی جهت استفاده از سرویس membership آشنا خواهیم شد.

سرویس های Membership و Roles در ASP.NET 2.0 (بخش اول)

تائید کاربران و امکان استفاده آنان از پتانسیل های موجود بر روی یک سایت و یا برنامه بر اساس مجوزهای تعریف شده ، از جمله عملیات مهم در بسیاری از وب سایت ها و یا برنامه های وب است . امروزه بر روی اینترنت می توان سایت های متعددی را مشاهده نمود که کاربران را ملزم به login نموده تا پس از بررسی هویت آنان ، امکان استفاده از امکانات موجود بر روی سایت ( تمام سایت و یا بخش هائی خاص ) بر اساس مجوزهای تعریف شده ، فراهم گردد . به عنوان نمونه ، در برخی از سایت ها امکان ارسال خبر ، پیام ، مشاهده مقالات و ...  صرفا" در اختیار کاربران تائید شده گذاشته می شود .
در سناریوی فوق ما با دو چالش اساسی مواجه هستیم :
  • تائید هویت کاربران ( Authentication )
  • استفاده از امکانات موجود بر روی سایت توسط کاربران با توجه به مجوزهای تعریف شده ( Authorization  )

اجازه دهید قبل از این که به نحوه مدیریت کاربران در ASP کلاسیک ، ASP.NET 1.x و ASP.NET 2.0 اشاره نمائیم ، تعریفی داشته باشیم از Authentication و Authorization  :

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

  • Authorization ، فرآیندی است که بر اساس آن مشخص می گردد  کاربر تائید شده مجاز به انجام چه نوع عملیاتی است .

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

ملزومات یک سیستم مدیریت کاربران به منظور تامین فرآیندهای Authentication  و Authorization
ایجاد یک سیستم جهت مدیریت کاربران  مستلزم انجام مراحل مشابهی است :

  • ایجاد یک بانک اطلاعاتی که اطلاعات مربوط به کاربران در آن ذخیره گردد.
  • ایجاد یک صفحه login
  • ایجاد سیستمی به منظور کنترل این که کاربران قادر به دستیابی چه صفحاتی می باشند . 
  • ایجاد یک صفحه برای تعریف کاربر جدید 
  • ایجاد یک صفحه برای مدیریت سایت جهت مدیریت کاربران 
  • و ...

در ادامه به بررسی امکانات ارائه شده در ASP کلاسیک ، ASP.NET 1.x و ASP.NET 2.0  در خصوص مدیریت کاربران خواهیم پرداخت .

ASP کلاسیک
قبل از ASP.NET ، پیاده کنندگان مجبور بودند که علاوه بر پیاده سازی تمامی مراحل فوق ، تمهیدات لازم به منظور تائید کاربران و صدور مجوزهای لازم به منظور دستیابی به منابع موجود بر روی یک سایت و یا برنامه را انجام دهند . یکی از چالش های اصلی در این زمینه و در هنگام درخواست یک منبع از سرویس گیرنده  توسط کاربر ، حصول اطمینان از این موضوع است که کاربر متقاضی قبلا" تائید شده باشد . یکی دیگر از چالش های موجود ، نحوه حفاظت برخی صفحات از دستیابی غیرمجاز است . چگونه می توان یک صفحه را بگونه ای پیکربندی نمود که صرفا" کاربران خاصی بتوانند از آن استفاده نمایند؟
به منظور حل مشکل فوق از یک متغیر session استفاده می گردید. برای کاربرانی که فرآیند Authentication را با موفقیت طی می نمایند یک متغیر session ایجاد و در تمامی صفحات وجود این متغیر بررسی می گردید تا هویت کاربر تشخیص و مجاز بودن وی برای استفاده از صفحه درخواستی تائید گردد .
در ASP کلاسیک به منظور مدیریت کاربران هیچگونه امکانات بالقوه ای وجود نداشته و پیاده کنندگان می بایست علاوه بر ایجاد بستر اطلاعاتی مورد نیاز ، ملزومات  سیستم مدیریت کاربران را پیاده سازی نمایند .

ASP.NET 1.x
به منظور کاهش عملیات مورد نیاز برای پیاده سازی سیستم مدیریت کاربران در ASP.NET 1.x ، امکانات متعددی ارائه گردید . تائید کاربران بر اساس فرم ، امکان تعریف قوانین و مجوزهای دستیابی در فایل web.config ، نمونه هائی در این زمینه می باشد .
ASP.NET ، مفهوم تائید بر اساس فرم را با استفاده از کلاس FormAuthentication معرفی تا امکان ورود و خروج از یک سایت با سهولت بیشتری فراهم گردد . بدین منظور از  یک Authentication ticket حفاظت شده به منظور بخاطر سپردن این که چه کاربرانی login نموده اند ، استفاده می گردید ( در زمان درخواست صفحات ) . برای ایجاد یک مکانیزم ایمن تبادل اطلاعات یک authentication ticket به عنوان یک کوکی بر روی کامپیوتر سرویس گیرنده ایجاد تا امکان بخاطر سپردن و تشخبص این که کاربر به برنامه و یا سایت login نموده است وجود داشته باشد (در درخواست های بعدی ) . کلاس FormAuthentication متدهای لازم به منظور کار با authentication ticket (  ایجاد :: logging و حذف :: logout ) را ارائه می نماید.
تائید کاربران مبتنی بر فرم به دنبال این هدف بود تا بتواند یک رویکرد استاندارد برای انجام دو عملیات متداول در ارتباط با مدیریت کاربران را ارائه نماید .
روش فوق علیرغم مزایای متعدد ، پیاده کنندگان را مجبور می نماید که همچنان حجم بالائی از کد را نوشته و مدیریت بسیاری از عملیات مرتبط با کاربران را خود انجام دهند( ایجاد صفحات login ,logoff ، تعریف یک کاربر جدید و ... ) . بدین ترتیب حجم کار پیاده کنندگان نه تنها کمتر نمی گردد ، بلکه در بسیاری از موارد نیز افزایش می یابد . رویکرد فوق باعث گردید که نتوان از یک روش جامع امنیتی استفاده نمود. مثلا" یک پیاده کننده ممکن است اطلاعات کاربران را به صورت متن معمولی و رمزنشده در یک بانک ذخیره نماید و دیگری به صورت hash  .
ایده تائید کاربران مبتنی بر فرم ارائه شده  در ASP.NET 1.x ،‌ یک ایده بزرگ و در عین حال جالب است ولی به نظر  پیاده سازی آن با در نظر گرفتن تمامی ملزومات مورد نیاز یک سیستم مدرن مدیریت کاربران انجام نشده است .

ASP.NET 2.0
فرآیند Authentication در ASP.NET 2.0 از طریق سرویس جدید membership  و Authorization از طریق سرویس جدید Roles انجام می شود.
ASP.NET 2.0 کار آغاز شده در تائید کاربران مبتنی بر فرم را که در نسخه ASP.NET 1.x شروع شده بود ، تکمیل و امکانات مناسبی برای انجام عملیات متفاوتی نظیر تائید کاربران ، ایجاد یک کاربر جدید ، حذف یک کاربر و ویرایش اطلاعات کاربران از طریق برنامه نویسی و به کمک  کنترل های وب را ارائه نمود  . شیوه عملکرد عمومی تائید کاربران مبتنی بر فرم در ASP.NET 2.0 مشابه نسخه قبلی است و می بایست عملیات اولیه و پیکربندی لازم را از طریق فایل های پیکربندی انجام داد  ( ثبت تنظیمات لازم در فایل web.config )  . چیزی که در ASP.NET 2.0 به آن اضافه گردید در واقع membership API  و کنترل های وب ( سرویس دهنده ) امنیتی است .   API فوق به برنامه نویسان اجازه می دهد از طریق کد به پتانسیل های سرویس  membership  دستیابی داشته باشند .
Membership API با استفاده از Provider model پیاده سازی شده است . این بدان معنی است که علیرغم این که اینترفیس فوق به خوبی تعریف شده است ولی می توان در صورت تمایل ، پیاده سازی آن را متناسب با شرایط موجود سفارشی نمود . فریمورک دات نت ، بدین منظور کلاس Membership را که شامل متدهائی نظیر CreateUser ,GetAllUser,Validateuser و ... است ، ارائه نموده است .سیستم membership قابلیت ها و توانمندهای برنامه نویسی خود را از طریق کلاس Membership ارائه می نماید . از کلاس فوق می توان مستقیما" در صفحات وب استفاده نمود . مثلا" می توان یک صفحه را ایجاد که تمام کاربران در سیستم را لیست نماید ( استفاده از متد Membership.GetAllUsers که به یک GridView نسبت داده شده باشد) .
ASP.NET به همراه دو Membership provider از قبل تعبیه شده ارائه شده است .یکی برای ذخیره اطلاعات کاربران در یک بانک اطلاعاتی SQL و دیگری که از اکتیو دایرکتوری استفاده می نماید .
علاوه بر موارد فوق ، ASP.NET 2.0 به منظور مدیریت کاربران هفت کنترل متفاوت را ارائه که با استفاده از آنان می توان برنامه های وبی را ایجاد نمود که از پتانسیل سرویس های membership و roles استفاده نمایند . در واقع ، کنترل های فوق یک رابط کاربر مناسب برای انجام عملیات مرتبط با کاربران را ارائه می نمایند .

در صورتی که از یک محل ذخیره سازی سفارشی استفاده شده باشد ( در صورت استفاده از یک membership provider سفارشی )  ، همچنان امکان استفاده از کنترل های فوق وجود خواهد داشت . این کنترل ها عبارتند از :

  • Login : یک اینترفیس متداول برای login شامل نام و رمز عبور را ارائه می نماید . به صورت پیش فرض ، زمانی که کاربر بر روی دکمه login کلیک می نماید یک postback ایجاد و کنترل تلاش می نماید تا بر اساس اطلاعات درج شده توسط کاربر وی را تائید نماید . بدین منظور متد ( Verify (Username,password  مربوط به کلاس membership صدا زده می شود . در صورتی که اطلاعات درج شده معتبر باشند ، یک authentication thicket  برای کاربر ایجاد می گردد . در غیراینصورت یک پیام خطاء بر روی اینترفیس نمایش داده می شود .

  • LoginView : در برخی موارد لازم است که در یک صفحه محتویات متفاوتی را با توجه به ماهیت کاربر ( ناشناس و یا تائید شده ) ، نمایش داد. مثلا" زمانی که یک کاربر ناشناس صفحه اصلی یک وب سایت را مشاهده می نماید یک Login web control نمایش داده شود و زمانی که یک کاربر تائید شده همان صفحه را مشاهده می نماید ، یک پیام خاص مرتبط با نام کاربر به همراه یک لینک جهت logoff نمایش داده شود . با استفاده از کنترل loginview می توان از دو تمپلیت AnonymouseTemplate و LoggedInTemplate استفاده نمود . کنترل های وب و تگ های Html را می توان در AnonymouseTemplate  برای کاربران ناشناس و کنترل ها و تگ های html برای کاربران تائید شده را در LoggedInTemplate قرار داد . Loginview همچنین می تواند خروجی های متفاوتی را با توجه به نقش کاربر تائید شده نمایش دهد .

  • PasswordRecovery : کنترل فوق ، این امکان را در اختیار کاربران قرار می دهد تا بتوانند رمزعبور موجود و یا جدیدی را از طریق email دریافت نمایند . در صورتی که memebership provider رمز عبور را به صورت hashed ذخیره کرده باشد ، فرآیند بازیافت رمز عبور عملا" ایجاد یک رمز عبور جدید و تصادفی است که برای کاربر ارسال می گردد . برای رمزهای عبوری که به صورت plain text  و یا رمز شده می باشند ، رمز عبور واقعی موجود برای کاربر از طریق email ارسال می گردد .

  •  Loginstatus : کنترل فوق یک لینک به صفحه login را برای کاربران ناشناس و تائید نشده ، نمایش خواهد داد . در صورتی که یک کاربر تائید شده صفحه را ملاقات نماید ، یک لینک logoff برای وی نمایش داده می شود .

  •  LoginName : کنترل فوق ، نام کاربر تائید شده ای  را که به سیستم وارد شده است ، نمایش می دهد . با استفاده از User.Identity.Name در برنامه ، می توان به کاربرانی که به سایت و یا برنامه login نموده اند ، دستیابی داشت .

  •  CreateUserWizard : علاوه بر یک صفحه جهت logging ، هر وب سایت مبتنی بر account نیاز به صفحه ای دارد تا مشخص نماید کدامیک از کاربران قادر به ایجاد یک کاربر جدید می باشند . کنترل CreateUserWizard ، یک رابط کاربر گرافیکی مناسب برای ایجاد یک کاربر جدید را  ایجاد می نماید.همانند کنترل login ، پس از تکمیل داده در فیلدهای مورد نیاز و کلیک بر روی دکمه Create user ، متد CreateUser کلاس Membership فراخوانده می شود . CreateUserWizard همچنین می تواند در صورت نیاز با استفاده از تمپلیت ها سفارشی گردد. 

  • Changepassword : از کنترل فوق به متظور تغییر رمز عبور استفاده می گردد .

تمامی کنترل های امنتیی اشاره شده را می توان بدون نیاز به نوشتن کد استفاده نمود . مثلا" برای‌ ایجاد یک صفحه login کافی است یک صفحه با نام Login.aspx را ایجاد و یک کنترل Login را بر روی آن قرار داد . بدین ترتیب شما دارای یک صفحه login می باشید بدون این که لازم باشد از یک خط کد استفاده شود . در صورت تمایل می توان شکل ظاهری و یا منطق کنترل را تغییر داد .
در بخش دوم به بررسی امکانات سرویس جدید membership در ASP.NET 2.0 و نحوه استفاده از آن در برنامه های وب خواهیم پرداخت .

آموزش زبان برنامه نویسی سی++

  • تاریخجه زبان برنامه نویسی C++

در سال 1967 شخصی بنام آقای "مارتین ریچاردز" برای نوشتن سیستم عامل و طراحی کامپایلر زبان جدیدی بنام BCPL طراحی نمود.

سه سال بعد، یعنی در سال 1970، "کن تامپسون" با افزودن ویژگی های جدیدی به زبان BCPL زبان جدیدی طراحی نمود و نسخه های اولیه سیستم عامل unix را با آن طراحی نمود. او این زبان را B نامید.

BCPL و  B هر دو از زبانهای بدون نوع بودند. به همین جهت بررسی یک عنصر داده ای، دلیل وظیفه سنگینی بر عهده ی برنامه نویس بود. در این زبان هر عنصر داده ای یک کلمه از حافظه، معادل 2 بایت، را اشغال می کرد.

دو سال بعد، یعنی در سال 1972، آقای "دنیس ریچی" زبان جدیدی را بر پایه زبان B طراحی نمود. از آنجاییکه این زبان پس از زبان B طراحی شده بود، زبان C نام گرفت. زبان C بسیاری از ویژگی ها و مفاهیم زبانهای BCPL و B را دارا بود و ویژگی های دیگری، از جمله انواع داده ای، را نیز به آنها افزوده بود.

زبان C مستقل از سخت افزار است، به همین دلیل با طراحی خوب و دقیق نرم افزار می توان برنامه هایی نوشت که دارای قابلیت حمل در اکثر کامپیوترها باشند.

قدرت زبان C باعث شد که شرکت های مختلفی در صدد طراحی کامپایلرهای C برآیند.

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

 شود.  19 سال پس از طراحی زبان C، "کمیته استاندارد ملی آمریکا" ،ANSI ، نسخه ی استاندارد زبان C را تصویب نمود.

            گامی به عقب :

در اواخر دهه 1970 هنگامی که "بیارنه استراس تروپ" بر روی تز دکترایش در دانشگاه کمبریج انگلستان کار می کرد مجبور بود برنامه های خود را به زبان Simula بنویسد. Simula از Algol مشتق شده و برای اولین بار مفاهیم کلاس به عنوان اشیا داده ای دراین زبان (Simula) مطرح شده بود. کلاس در Simula، جرقه ی طراحی و ساخت کامپایلر C++ را در ذهن "بیارنه" شعله ور نمود. او پس از مهاجرت از انگلستان به آمریکا و کار در شرکت AT&T تعمیم و گسترش زبان C را آغاز کرد. زبان جدید در سال 1980 طراحی شده و در 1982 با استقبال فراوانی روبرو شده بود.

این زبان با عناوین متفاوتی از جمله "New C" و "C With Classes" و "C84" مشهور بود! یکی از همکاران "استراس تروپ" بنام Rick Mascitti نام C++ را برای آن برگزید.

17 سال بعد از طراحی C++ یعنی در نوامبر سال 1997 C++  نیز استاندارد شد.

C++  زبانی دو رگه است! چنانچه این قابلیت را دارد که هم به صورت "پیمانه ای" و هم بصورت "شی گرا" نرم افزارهای قابل اعتمادی را ایجاد نماید. چند سال بعد زبان جاوا نیز بر پایه ی C و C++ طراحی شد.

 

 

·         کتابخانه استاندارد C++

برنامه های  C++از قطعاتی به نام کلاس ها و توابع تشکیل می شود. شما در عین حال که برای برنامه نویسی به این قطعات از پیش ساخته شده نیاز دارید، می توانید این قطعات را نیز خودتان بسازید.

"کتابخانه استاندارد C++" دارای کلاس های و توابع زیادی می باشد که مجموعه ای غنی، جهت برنامه نویسی را در اختیار برنامه نویسان قرار می دهد.

بنابراین برای یادگیری زبان C++ باید به دو امر مهم همت گماشت :

1-      یادگیری ساختار و نحو زبان C++

2-     یادگیری کلاس ها و توابع از پیش ساخته شده، در "کتابخانه ی استاندارد C++".

 

تذکر : برای آموختن دقیقتر این توابع و کلاس ها می توانید به کتاب The Draft Standard C++ Library مراجعه نمایید.

 

 

·             پایه و اساس یک محیط نمونه برنامه نویسی C++

طراحی برنامه در C++ اغلب شامل 5 مرحله می باشد :

1-                ویرایشگر        : شامل تایپ کدهای برنامه در ویراستار C++ و ذخیره بر روی هارد دیسک با پسوند *.C و یا *C++. [Editor]

2-               پیش پردازنده : افزودن فایل های متنی مورد نیاز، در فایلی که قرار است کامپایل شود. [PreProcessor]

3-              کامپایلر           : ترجمه ی کدهای برنامه به زبان ماشین توسط کامپایلر و ساختن فایل *Obj. [Compiler]

4-              پیوند دهنده    : ساختن فایل اجرایی (*.Exe) و افزودن تمام چیزهایی که برای اجرای برنامه بدون حضور به کامپایلر لازم است.[Linker]

5-              بار کننده          : انتقال کدهای زبان ماشین از روی دیسک سخت در حافظه ی اصلی کامپیوتر. [Loader]

 

تمامی این قسمت ها در جای مناسب مفصلا توضیح داده خواهند شد.

 

عملگرها و متغییرها

·        عملیات ریاضی :

در زبان C++ بیش از هفتاد عملگر وجود دارد!

تعدادی از این عملگرها ماهیت ریاضی دارند. در این قسمت به بررسی این عملگرها خواهیم پرداخت.

جدول زیر بیانگر قابلیت عملگرهای اصلی ریاضی می باشد.

 

 

 

·        تصمیم گیری : عملگرهای مقایسه ای !

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

 

 

·        عملگرهای درج در جریان و استخراج از جریان:

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

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

 

 

·        انواع داده ای و تعریف متغییر :

متغییر چیست؟ فضا ای از حافظه ی اصلی، که در اختیار برنامه نویش قرار می گیرد. کامپایلر از این فضا محافظت می کند که سایر برنامه های در حال اجرا مقدار آن را تغییر ندهند.

در C++ چهار نوع اصلی وجود دارد :

 

 تذکر : برای کسب اطلاعات بیشتر در مورد انواع متغییرها، می توانید به راهنمای کامپایلر خود مراجعه نمایید.

 

تعریف کردن یک متغییر در زبان C++ بسیار ساده تر از آن است که فکرش را می کنید!

ابتدا نام نوع را می نویسیم و سپس نام متغییر !

دقت کنید :

int a ;

float f ;

double d ;

char ch ;

چهار متغییر به ترتیب از نوع «اعداد صحیح»، «اعداد اعشاری»، «اعدا حقیقی بزرگ» و «کاراکتری» تعریف شده است.

در قسمت های بعدی کاربرد عملی این قسمت را مشاهده خواهید کرد.

 

 

ساختار یک برنامه ی C++

·        در حاشیه  C++

در صورتی که یک برنامه ی C++ به طرز صحیحی طراحی و پیاده سازی شود، قابلیت خوانایی آن با برنامه هایی که با سایر زبان ها نوشته می شوند قابل مقایسه نیست! شاید مهمترین مزیت C++ نسبت به C و سایر زبانهای برنامه نویسی خاصیت شی گرایی آن باشد. این ویژگی که انقلابی در عرصه ی تولید نرم افزار تولید کرده است، در عین سادگی برای مبتدیان پیچیدگی خاصی دارد. شاید اصلی ترین دلیل پیچیدگی، همان سادگی اش باشد!

برای کسانی که با زبان C++ آشنایی ندارند، علائم بکار رفته در این زبان شاید عجیب و حتی خنده دار باشد!

نظر شما چیست؟

#include <iostream.h>

void mian()

{

          cout << "Learning The Art Of Object Oriented Programming In  www.yosafy.blogsky.com" ;

};

حقیقت این است که برای یادگیری C++ باید ابتدا C را آموخت. در واقع می توان گفت که :

C++   =   C + Classes

با یادگیری زبان C و سپس افزودن مباحث مربوط به کلاس ها به معلومات خویش می توان به C++ مسلط شد. برای یادگیری زبان قدرتمند visual C++ ، به ناچار باید با معلومات جامع و کاملی از C++ و ترجیجا یک زبان ویژوال داشت و سپس سراغ این اعجوبه قرن رفت.

 

 

·             بررسی ساختار یک برنامه به زبان C++

در این قسمت می خواهیم ساختار عمومی یک برنامه به زبان C++ را بیاموزیم.

قطعا با معلوماتی که تا به اینجا آموختید درصد قابل قبولی از ساختار یک برنامه ی C++ را درک خواهید کرد:

 

1)      #inlcude <iostream.h>

 

2)      Functions Prototype

 

3)      void mian()

4)      {

5)                The Programme Body (Declaration Variable, Call Functions & Objects)

6)      };

 

7)      Implementation Functions

 

تذکر : شماره گذاری ها برای درک ساده تر می باشد. بدیهی است که در یک برنامه شماره گذاری خطوط منجر به خطای دستوری(Syntax Error) خواهد شد.

حال به بررسی مختصر هر قسمت می پردازیم :

#include <iostream.h>

این خط (که اولین خط برنامه ی C++ هم می باشد) در واقع یک دستور پیش پردازنده است!

در واقع تمام خطوطی که با # شروع می شوند یک دستور پیش پردازنده هستند.

این دستور به "پیش پردازنده" می گوید که :

"محتویات فایل iostream.h را به برنامه اضافه کن".

در داخل فایل iostream.h دستورات مربوط به ورودی و خروجی قرار دارد. در واقع اگر برنامه ما بخواهد از دستورات ورودی و خروجی استفاده نماید باید ابتدا فایل iostream.h را به کمک دستور پیش پردازنده به بدنه برنامه اضافه نماید و آنگاه بتواند از توابع درون آن استفاده نماید.

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

نکته : به فایل هایی مثل iostream.h  «سرفایل» یا «هدر فایل» می گویند.

 

void mian()

مطمئنا در تمام برنامه های C++  شاهد این خط خواهیم بود.

تعریف اشیاء داده ای، تعریف متغییرها، نوشتن دستورات برنامه و ... همگی در زیر این عبارت تعریف می شوند.

یک برنامه C++ از فراخوانی متدهای کلاس ها و احیانا فراخوانی توابع ایجاد می شود. همگی این اعمال در این قسمت از برنامه انجام می شود. به این قطعه از برنامه، «تابع اصلی» گفته می شود.

توضیحات کاملتر در این مورد را به قسمت «توابع» واگذار می کنیم.

 

توضیحی پیرامون علامت های "{" و "}" : زبان C++ ،مانند بسیاری از زبانهای برنامه نویسی، از بلاک بندی کدها استفاده می نماید. یک بلوک از برنامه دارای ویژگی های خاص خود می باشد که از حوصله ی بحث ما خارج است(برای کسب اطلاعات بیشتر در مورد بلوک بندی در زبانهای برنامه نویسی می توانید به کتاب «طراحی و پیاده سازی زبانهای برنامه سازی» نویسنده : ترنس پرات، رجوع نمایید.)

بلوک بندی در زبان پاسکال با کلمات کلیدی begin و end ساخته می شود. در زبان ویژوال بیسیک کدهای بین private sub و end sub و همچنین کدهای نوشته شده بین if  و end if در واقع یک بلوک تشکیل داده اند. در زبان C++ نیز یک بلوک با "}" آغاز گشته و با "{"  خاتمه می یابد. تمام توابع، از جمله تابع اصلی، باید در یک بلوک ساخته شوند.

            تذکر : توضیحات بیشتر در مورد بلوک بندی و همچنین خطوط 2 و 7 را به قسمت سوم این سلسله مقالات یعنی "توابع" موکول می کنیم.

            تذکر : در پایان هر خط از برنامه C++ باید یک یک علامت سمی کولن «;» گذاشته شود.

 

 

·             آغاز برنامه نویسی

به خط مقدم خوش آمدید!

بد نیست کم کم شروع کنیم:

#include <iostream.h>

void mian()

{

          cout << "Learning The Art Of Object Oriented Programming In   www.yosafy.blogsky.com" ;

};

 

در واقع تنها دستوری که باید توضیح داده شود عبارت cout می باشد!

 

cout << "Learning The Art Of Object Oriented Programming In  www.yosafy.blogsky.com" ;

اولین دستور خروجی!

همانطور که در قسمت «عملگرها» گفته شد این قطعه کد، عبارت مقابلش را در صفحه نمایش چاپ می کند.

نحو این دستور چنین است :

cout << "عبارتی که باید در صفحه نمایش چاپ شود"   ;

تذکر : در پایان هر خط از خطوط زبان C++ باید یک سمی کولن «;» گذاشته شود.

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

cout  << "Learning The Art Of " << "Object Oriented Programming " << "In " << " www.yosafy.blogsky.com"  ;

 

 

 

·       گامی فراتر :

قصد داریم برنامه دیگری بنویسیم و از آموخته هایمان هر چه بیشتر استفاده نماییم.

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

 

#include <iostream.h>

void main()

{

          int a;

          int b;

          cout<< "Please Enter A Number : " ;

          cin>> a ;

          cout<< "Please Enter Next Number : " ;

          cin>>b ;

 

          if (a>b)

                   cout<< "a > b";

          else if (a

                   cout<< "a

          else

                   cout << "a=b";

};

با ساختار شرطی if بعدها آشنا خواهید شد. با توجه به آشنایی که با سایر زبانهای برنامه نویسی دارید انتظار می رود که بتوانید عملکرد برنامه بالا را درک نمایید!

راستی برنامه بالا چه کاری انجام می دهد؟

 

 

در قسمت بعدی این مقاله به بررسی انواع ساختارهای کنترل خواهیم پرداخت.

 


 

آشنایی با مفاهیم پایگــاه داده هـــا

مفاهیم مبنایی :
مفهوم پایگاه داده ها : پایگاه داده ها در ساده ترین وجه به مثابه مخزنی میماند که اطلاعات و داده ها به صورت منسجم و احتمالا ساخت یافته در آن نگهداری میشود . این مخزن میتواند یک فایل متنی یا باینری ساده باشد .
همزمان با پیدایش تکنولوژی ذخیره سازی اطلاعات و فایلها ، پایگاه داده ها نیز متولد شد و همزمان با رشد تکنولوژی ذخیره و بازیابی اطلاعات  و سیستم فایلینگ  ، پایگاه داده ها نیز به صورت موازی و با آن رشد کرد . پایگاه داده ها از زمان تولد تا کنون پنج نسل را سپری کرده است .
همزمان با گسترش نیاز کاربران برای ذخیره سازی و بازیابی اطلاعات برنامه نویسان متعددی اقدام به ایجاد برنامه هایی  با اهداف و کاربردهای متفاوت کردند . صرف نظر از برنامه هایی که از نظر کاربرد کاملا متفاوت بودند برنامه هایی نیز وجود داشتند که ماهیت و کاربرد یکسانی داشتند ولی توسط برنامه نویسان متعدد ایجاد شده بودند . بهترین مثال برای این مطلب دفـتـــرچـــه تلـفــن  میباشد . چندین و چند نسخه متفاوت دفترچه تلفن موجود بود که همه آنها امکانات کاملا مشابهی داشتند ولی الگوریتمها و روشهای برنامه نویسی آنها کاملا متفاوت بود . مهمترین وعمده ترین تفاوتهای که بین این برنامه ها وجود داشت در زیر ذکر شده اند :
  • نوع و ماهیت فایلی که اطلاعات در آن ذخیره میشد ( بعضیهااز نوع باینری و بعضی TXT و... بودند )
  • الگوریتم و روش ذخیره سازی داده ها در فایل
  • نام توابع ( فرضا تابع مربوط به جستجو  در هر برنامه نامی  مطابق با سلیقه برنامه نویس داشت )
تمام این برنامه ها در واقع نوعی بانک اطلاعاتی هستند که برای اهداف خاص ایجاد شده اند . لذا به منابع داده در هر برنامه به جز در همان برنامه در جای دیگری کاربرد نداشت و به هیچ درد دیگری نمیخورد حتی برنامه هایی که مشابه بودند ( مانند دفترچه تلفن ) نیز ( بنا به دلایل ذکر شده ) نمیتوانستند با هم تبادل اطلاعات داشته باشند و اگر میخواستیم از فایل حاوی داده های یک دفترچه تلفن در دفترچه تلفن دیگری استفاده کنیم هیچ راهی وجود نداشت . در ضمن در تمام این برنامه ها به جز فایل و برنامه نوشته شده توسط برنامه نویس هیچ چیز دیگری وجود نداشت که بتواند امنیت داده ها را تضمین کند . و به طور کلی داده ها را کنترل و مدیریت کند . مشکل دیگری که این برنامه ها داشتند این بود که این برنامه ها تنها قابلیت این را داشتند که یک کاربر از آنها استفاده کند و استفاده به صورت اشتراکی از منابع داده ها امکان پذیر نبود .
 با گسترش روز افزون اطلاعات و نیاز روز افزون کاربران برای ذخیره و بازیابی اطلاعات و دسترسی سریع به اطلاعات و لزوم تامین امنیت اطلاعات ،  لازم بود برنامه های تخصصی و ویژه ای برای این منظور ایجاد شوند .  لذا چندین شرکت تصمیم به طراحی و تولید چنین برنامه هایی را گرفتند که از شرکتهای IBM  و  Microsoft  و چند شرکت دیگر به عنوان پیشگامان این امر میتوان نام برد .
 برنامه های مذکور پایگاه داده ها نام گرفتند . شرکتهای مذکور باید  برنامه هایی را ایجاد میکردند که قابلیت استفاده برای مصارف گوناگون را داشته باشد . در ضمن این برنامه ها باید دارای قسمتی باشند که به عنوان واسط بین برنامه کاربردی و فایلها (منابع داده ) قرار بگیرد و عملیاتهای مربوط به ایجاد ، حذف و تغییر و ... را  در منابع داده را کنترل و مدیریت کند . این برنامه واسط را DBMS  نامیدند .

DBMS  اختصار (DATABASE  MANANGMENT  SYSTEM )  میباشد که معنای لغوی آن سیستم مدیریت پایگاه داده یا سیستم مدیریت داده ها میباشد .
باید خدمتتون عرض کنم که بزرگترین جهشی که پایگاه داده ها در راستای رشد و تکامل داشت مربوط به همین قسمت یعنی تولید و تکامل  DBMS  میباشد . گفتیم که وظیفه DBMS  این است که بین برنامه کاربردی و منابع داده ها قرار بگیرد و کلیه عملیاتهای مربوط به( ایجاد ، تغییر ، حذف و .... ) منابع داده ها را کنترل و مدیریت کند . کنترل و مدیریت منابع داده ها بسیار کلی و میباشد و اگر بخواهیم منظور از کنترل و مدیریت را کامل شرح دهیم باید ساعتها وقت صرف کنیم و دهها  صفحه مطلب بنویسیم که قطعا در این مجموعه نخواهد گنجید ضمن آنکه این مطالب کاربردی نیط نیستند و تنها جنبه اطلاعاتی دارند  لذا تنها چند نکته مهم را ذکر میکنم و در صورتی که علاقمند بودید بیشتر بدانید میتوانید به کتابهای موجود در این زمینه مراجعه فرمایید .
منظور از کنترل و مدیریت :

  • مصون کردن برنامه های کاربردی در قبال تغییرات در سخت افزار ذخیره سازی .
  • مدیریت رکوردهای سرریز که پس از لود اولیه باید در فایل وارد شوند .
  • ایجاد فایل با ساختارهای گوناگون
  • فراهم کردن امکاناتی برای دستیابی مستقیم و ترتیبی به رکوردها و فیلدها .
  • جدا کردن ساختار فیزیکی و منطقی فایلها از یکدیگر
  • تامین ایمنی و حفاظت داده ها 
  • جلوگیری از تکرار ذخیره سازی داده ها ( تاحدی )
  • فراهم کردن امکاناتی برای پردازش بلادرنگ (real time ) بسته به نوع سیستم عامل
  • تامین صحت داده های ذخیره شده ( تاحدی )
  • فراهم کردن امکاناتی برای بازیابی بکمک چند کلید
  • فراهم کردن امکاناتی برای استفاده چند کاربر به صورت همزمان از منبع داده و کنترل آن
  • کنترل و مدیریت مسائل مربوط به همزمانی و سطح دسترسی کاربران به منبع داده ها
  • و .....

با توجه به موارد ذکر شده شرکتها سیستمهای گوناگونی را به این منظور طراحی و تولید کردند که هر سیستم دارای یک رابط گرافیکی برای گرفتن و انجام فرامین کاربر و یک DBMS  بود که تمام مطالب ذکر شده در بالا در این سیستمها لحاظ شده بودند . علاوه بر این دو دفترچه ای نیز به همراه سیستم ارائه میشد که حاوی نام و کاربرد توابع موجود در سیستم بود . برنامه نویسان در صورت نیاز میتوانستند از این توابع در برنامه های خود استفاده کنند و دستوری را به سیستم ارسال کنند . رابطه این توابع با سیستم مورد نظر دقیقا مانند رابطه توابع API  موجود در ویندوز و خود ویندوز میباشد . اندک زمانی پس از تولید این سیستمها کنسرسیومی تشکیل شد که  اقدام به تهیه استانداردهایی در زمینه تولید نرم افزارهای بانک اطلاعاتی کرد و از آن پس تمام شرکتهای تولید کننده ملزم به رعایت این استانداردها بودند . یکی از این تصمیمات و استانداردها یکسان سازی نام توابع در تمام سیستمها بود . دیگر آنکه قرار بر آن شد که یکسری کلمات و عبارات ویژه درنظر گرفته شوند که هر یک معرف عملیاتی ویژه باشند و برنامه ای به تمام سیستمها اضافه شود که وظیفه آن دریافت ، تفسیر و اجرای این عبارات (دستورات ) باشد  . مجموعه این کلمات و برنامه ای که وظیفه تفسیر آنها را داشت ، منجر به تولید زبان مشترکی برای بانکهای اطلاعاتی شد  . این زبان برنامه نویسی زبان پایه تمام بانکهای اطلاعاتی میباشد که آن را T-SQL مینامند که اختصار  (Transact Structured Query Language ) میباشد .
در واقع  وظیفه این کلمات و عبارات فراخوانی توابع موجود در سیستم میباشد . دستورات  زبانSQL  به دوبخش تقسیم میشود :
  • دستورات مربوط به کار با داده ها ( DML)
  • دستورات مربوط به تعریف داده ها ( DDL )
تمامی سیستمهای ارائه شده در  DML  دستورات کاملا مشابهی را دارا میباشند اما در بخش DDL دارای تفاوتهای جزئی میباشند . در ضمن سیستمهای مختلف ارائه شده علاوه بر دستوراتی که کار یکسانی را انجام میدهند ممکن است دستورات اضافه تری نیز داشته باشند که وظیفه این دستورات اضافی انجام عملیاتهای ترکیبی میباشد . جلوتر بیشتر با این زبان برنامه نویسی و دستورات آن آشنا خواهیم شد و در مثالهای مختلف از دستورات مختلف این زبان استفاده خواهیم کرد .

خوب تا اینجا با تاریخچه پایگاه داده ها به صورت کلی و ساده آشنا شدیم . در زیر چکیده ای از مطالب بالا را به همراه مزیتهای بوجود آمدن تکنولوژی بانک اطلاعاتی را  ذکر خواهم کرد .و از این پس میرویم سراغ مفاهیم کاربردی پایگاه داده ها . دقت کنید که مفاهیم و کلمات مهم را به صورت زیر خط دار و زردرنگ نوشته ام .

از مجموعه مطالب ذکر شده در بالا فهمیدیم که :

با گسترش روز افزون اطلاعات و نیاز کاربران به ذخیره و بازیابی اطلاعات سیستمهایی طراحی شدند که قابلیت استفاده برای مصارف گوناگون  را دارا میباشند . همچنین  این برنامه ها امکان استفاده اشتراکی از منابع داده را نیز فراهم کردند . در این سیستمها ما به هر فایلی که اطلاعاتی با ساختار معین  در آن قرار گرفته  است را  منبع داده  مینامیم. این سیستمها به صورت تخصصی برای ذخیره و بازیابی اطلاعات طراحی و ساخته شده اند از این رو به این سیستمها پایگاه داده ها یا همان بانک اطلاعاتی میگوییم . تمامی پایگاه داده های موجود دارای بخشی با عنوان DBMS  یا سیستم مدیریت داده ها  میباشند که به عنوان واسط مابین برنامه کاربردی و منبع داده قرار میگیرد و کلیه موارد مربوط به ذخیره و بازیابی لطلاعات را به صورت خودکار کنترل میکند . این سیستم همچنین مسئول تامین امنیت داده های ذخیره شده نیز میباشد . سیستمهای ارائه شده  محصول هر شرکتی که باشند از استاندارد واحدی برای ذخیره و بازیابی اطلاعات تبعیت میکنند . در ضمن تمامی پایگاه داده های موجود دارای یک زبان پایه و مشترک با نام  T-SQL  مبباشند  که برنامه نویسان  در اکثر موارد بدون آنکه نوع بانک مورد نظر مهم باشد میتوانند از این زبان برای انجام امور بانکی در برنامه های خود  استفاده کنند . علاوه بر مطالب ذکر شده باید خدمتتون عرض کنم که بانکهای اطلاعاتی دارای مزیتهای بینظیری میباشند که این مزیتها به تدریج به این تکنولوژی اضافه شدند .از جمله این مزیتها  میتوان کنترل متمرکز روی تمام داده هارا نام برد که یکی از مزایای این امر کاهش میزان افزونگی در ذخیره سازی داده ها میباشد .در واقع در تکنولوژی بانکهای اطلاعاتی تکرار ذخیره سازی داده ها به حداقل میرسد که این امر خود دارای مزایای فراوانی میباشد که صرفه جویی در فضای ذخیره سازی  و کاهش عملیات سیستم از جمله مهمترین آنها میباشد . یکی دیگر از مزیتهای مهم بانکهای اطلاعاتی این است که با گسترش این تکنولوژی مفهوم چند سطحی بودن و معماری چند لایه به تدریج قوت یافت و بسط پیدا کرد  . از دیگر مزایای این تکنولوژی این است که مفاهیمی چون منطق صوری ، سیستمهای خبره ، مفاهیم هوش مصنوعی  و  ... نیز در این تکنولوژی رخنه کرده اند  که این امر موجب میشود که سیستم قادر به استنتاج منطقی از داده های ذخیره شده باشد . و به عنوان آخرین مزیت نیز میتوان این مورد را ذکر کرد که در این سیستمها کاربران در یک محیط انتزاعی (ABSTRACTIVE)  و مبتنی بر یک ساختار داده یی تجریدی کار میکنند و بکمک احکام زبانی خاص ، عملیات مورد نظر خود را انجام میدهندو بدین ترتیب برنامه های کاربردی ازداده های محیط فیزیکی کاملا مستقل میشوند .من گفتم آخرین مزیت اما این آخرین مزیت نیست بلکه آخرین مزیتی است که من ذکر میکنم و مزیتهای استفاده از بانک اطلاعاتی نیز آنقدر زیاد است که از حوصله این مقاله خارج میباشد .

تا اینجا بحث بارها به کلمات داده ها  و اطلاعات برخورد کرده ایم . اما مفهوم واقعی  این دو چیست ؟ در زیر تعریف این دو واژه را برای شما ذکر خواهم کرد و با تفاوتهای این دو آشنا خواهیم شد .

توجه : مطالبی که از اینجا به بعد ذکر خواهند شد بسیار بسیار مهم و حیاتی میباشند لذا خواهشمندم تا زمانی که هر خط را کاملا متوجه نشده اید هرگز سراغ خط بعدی نروید . حتی اگر صد بار یک خط را تکرار کنید .


مفهوم داده :
داده عبارت است از مقادیر صفات خاصه (ATTRIBUTES) انواع موجودیت ها .

خوب با ارائه تعریفی برای داده با دو واژه دیگر نیز برخوردکردیم که احتمالا برای شما نامفهوم میباشد لذا تعریفی برای این دو نیز ارائه خواهم داد .

نوع موجودیت : مفهوم کلی یک پدیده ، شی و یا فرد که در ورد آنها میخواهیم اطلاع داشته باشیم .

صفت خاصه : ویژگی جداساز یک نوع موجودیت از نوع دیگر را گویند .

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

خوب اگر من یک موجودیت باشم قطعا یکی از صفات خاصه من نام من میباشد و دیگری نام پدرم و دیگری شماره شناسنامه ام  و .... درست ؟ حالا مقدار هریک از این صفات خاصه من را داده میگویند .  به عنوان مثال نام من علیرضا است پس عریضا یک داده است . شماره شناسنامه من 1912 میباشد پس عدد 1912 داده بعدی من میباشد  و ...

پس موجودیت ما یک انسان در نظر گرفته شد که این انسان توسط یـکسری صفاتی دارد که مختص انـسـان اسـت  ( صفات خاصه ) و هر یک از این صفات خاصه دارای مقداری هستند که این مقدار نیز همان داده است

اطلاع :  اطلاع از داده حاصل میشود و در حل مسائل به کار میرود .

ببینید هر داده هنگامی که در یک موقعیت مشخص برای حل مساله ای به کار گرفته شود به اطلاع تبدیل میشود . در بالا موجودیت ما انسان بود که بنده بودم خوب من به جز نام و شماره شناسنامه و ... صفات خاصه دیگری نیز دارم که یک نمونه از آنها معدل دیپلم من است . فرض کنید معدل دیپلم من 17 باشد . پس 17 نیز یک داده است . حال اگر بخواهیم  بالاترین معدل را در بین دانش آموزان دیپلم گرفته تهران  پیدا کنیم  چون از داده های موجود در فرمول پیدا کردن ماکزیمم استفاده میکنیم لذا عدد 17 که تاکنون داده بود به اطلاع تبدیل میشود

میدانم که احتمالا درک این مطالب احتمالا کمی مشکل به نظر میآید اما اگر کمی دقت کنیم میبینیم که اتفاقا بسیار ساده هستند . از طرفی اگر کسی این مفاهیم را نفهمد قطعا از اینجا به بعد هیچ چیز دیگری را نیز نخواهد فهمید چون از این واژه ها و مفاهیم آنها بارها و بارها استفاده خواهیم کرد و پایه  تمام مطالب جدیذی که جلوتر  ذکر خواهم کرد  .

یک بار دیگر و برای آخرین بار این مطالب را با مثال شرح میدهم و سپس به سراغ مطالب بعدی خواهیم رفت .

در کل چهار  تا واژه بسیار مهم و کاربردی داریم :

  • داده
  • موجیدیت
  • صفت خاصه
  • اطلاع

در این کره  خاکی و این جهان هستی  ما سه تا دسته بیشتر نداریم . یعنی هر چیزی که ما میتوانیم نام ببریم یا یک شی (مانند  قابلمه ) است یا یک فرد ( مانند شما )  است یا یک پدیده ( مانند زلزله )  . ما به هریک از اجزاء این سه دسته موجودیت میگوییم . چرا چون وجود دارد . یعنی قابلمه وجود دارد پس قابلمه یک موجودیت میباشد . حالا ما چندین و چند مدل قابلمه داریم که این قابلمه ها با هم فرقهایی دارند . خوب عامل این تفاوتها چیست ؟ درسته هر قابلمه دارای یکسری خصوصیتها و صفاتی میباشد که این قابلمه را از قابلمه دیگر جدا میکند و علاوه بر آن همان صفات باعث میشنود تا بین من و قابلمه هم فرقی بوجود آید جون قابلمه صفاتی دارد که من ندارم و این صفات مخصوص قابلمه است نه انسان !  پس قابلمه دارای یکسری صفات است که مخصوص قابلمه است که ما به هر یک از این صفات صفت خاصه میگوییم . هر صفت خاصه این قابلمه دارای یک مقدار است . مثلا اگر رنگ قابلمه را به عنوان یکی از صفات خاصه آن در نظر بگیریم قطعا این صفت خاصه مقداری دارد که ما فرض میکنیم نارنجی است . خوب نارنجی هم شد  داده ما . حالا اگر ما در یک پردازش یا در حل یک مساله از نارنجی استفاده کنیم نارنجی از داده به اطلاع تبدیل میشود . امیدوارم دیگه همه این مفاهیم را فهمیده باشند .

پس در حالت کلی موجودیت  هر شی یا عین قابل تمیز است که ما میخواهیم  داده های آن را در بانک بریزیم و در صورت نیاز از آن اطلاعات داشته باشیم /.  اگر ما مجموعه ای از موجودیت ها را در نظر بگیریم به ان مجوعه محیط عملیاتی میگویند  . فرضا اگر موجودیت ما دانشجو باشد محیط عملیاتی ما میشود دانشگاه . محیط عملیاتی بر اساس نوع برنامه ای که قرار است درست کنیم تغییر میکند . اگر بخواهیم برنامه کتابخانه بنویسیم موجودیت ما کتاب است و محیط عملیاتی ما نیز کتابخانه . اگر بخواهیم برنامه ای برای انتخاب واحد دانشجویان بنویسیم موجودیت ما میشود دانشجو و محیط عملیاتی ما نیز دانشگاه میباشد .

محیط عملیاتی هر چیزی که باشد موجودیتهای آن با هم  ارتباطاطی دارند  . به عنوان مثال بین دانشجو و درس ارتباطاطی وجود دارد که دانستن  این ارتباطات  در طراحی برنامه نقش حیاتی دارند . ارتباط بین موجودیت ها انواع مختلفی دارد که در زیر ذکر خواهم کرد  :

  • ارتباط یک به یک
  • ارتباط یک به چند
  • ارتباط چند به یک
  • ارتباط  چند به چند

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

 

طرح ایجاد پایگاه داده های زبان فارسی با کمک کامپیوتر

کلید واژه ها :

زبان فارسی پایگاه اطلاعاتی   پیکره زبانی   پایگاه داده های زبانی

           چکیده:

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

 

1 هدف طرح

هدف این طرح گردآوری و سازماندهی یک پیکره زبانی پایه برای زبان فارسی (شامل متنهای مهم و واژگان عمده آن ) در درون یک سیستم اطلاعات کامپیوتری و ایجاد نخستین بانک داده های زبان فارسی برای بهره گیری همه کاربران و پژوهندگان است .

 

2 - پیشینه بانکهای داده های زبانی

گرچه درگذشته سازمانها ، مراکز پژوهشی ، کتابخانه ها و مانند اینها به گردآوری اطلاعات تخصصی در زمینه های گوناگون و ارائه آنها با سرعت و تنوع زیاد علاقه مند بوده اند ؛ اماتنها پس از پیدایش کامپیوتر ، اندیشه ایجاد پایگاههای داده ها و بانکهای اطلاعاتی به خود جامه عمل پوشید . بویژه در زمینه پژوهشهای زبانی و فرهنگ نگاری ، روشهای کامپیوتری (یعنی پردازش خودکار زبان طبیعی  Automated Natural Language Processing  بسیار موفق بوده است .  

  در سه دهه گذشته ، بیشتر کشورهای صنعتی به ایجاد بانکهای زبانی خود پرداختنه اند . این کشورها ، ابتدا با گردآوری داده ها یا پیکره های زبانی (Corpus Linguistics )  ) و سپس با سازماندهی آنها در پایگاههای داده ها (Databases) و بانکهای اطلاعات زبانی (Linguistic Data Banks )، از شبکه های جهانی داده های زبانی (International Networks of Linguistic Data ) بهره برداری می کنند . در پیوست الف ، نمونه هایی از هریک آورده شده و برای آگاهی از جزئیات بیشتر ، از منابع مربوط نیز یاد گردیده

    زبان فارسی را همواره از نظر منابع ادبی و واژگان ، یکی از زبان ها ی غنی و با سابقه به شمار آورده اند ؛ اما تا کنون بررسی همه جانبه و دقیقی با تکیه بر آمار و داده های کافی ، درباره این زبان انجام نیافته است . همچنین بسیاری از پژوهشهای زبانشناختی و تصمیم گیریها در برنامه ریزی زبانی ، تنها با دسترسی به یک پیکره زبانی کافی و است .

3-دلایل پیشنهاد طرحمستند ، ارزش و اعتبار خواهند داشت از سوی دیگر، با گسترش کار برد کامپیوتر و پیدایش امکانات تازه نرم افزاری و سخت افزاری ، و وجود نمونه های بسیاری از این گونه بانک های داده ای زبانی در جهان و اثبات سود مندی و کارایی آنها ، زمان برای آغاز کوششهایی برای زبان فارسی ، از هر جهت مناسب می نماید .

دستیابی سریع به مجمو عه عظیمی از پیکره زبان فارسی و نیز امکان هرگونه جستجوی جهتدار، موضوعی و یا ساختاری در میان داده ها ، آرزوی هر پژوهنده زبان است . یک گنجینه بسامان از متنهای مهم و واژگان فارسی ، منبعی قابل اعتماد و آماری دقیق در دسترس افراد یا سازمانهای علاقه مند قرار می دهد . برخی از کاربردها ی بانک داده های زبانی در زمینه های زیر است :

- فعالیتهای گوناگون فرهنگ نگاری

 - واژه گزینی علمی

-  بررسیهای دستوری و تدوین دستور زبان امروز

 - بررسی تحولات تاریخی زبان فارسی و پیگیری سیر تحول واژگان  آن

 - مطالعات سبک شناسی در دوره های گوناگون ، یا درباره نویسندگان و شاعران مشخص

 - بررسیهای آوایی و گویش شناسی

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

 - اجرای طرح ترجمه ماشینی برای زبان فارسی  

 

5- کاربران

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

5-1- سازمانها 

-         سازمانهایی که به  پژوهشهای زبانی و زبان شناختی می پردازند ، مانند پژوهشگاه علوم انسانی و مطالعات فرهنگی ؛

-         سازمانهای برنامه ریزی زبانی ، مانند فرهنگستان زبان ؛

-         سازمانهایی که با آموزش زبان سروکار دارند ، مانند دانشگاه ها و وزارت آموزش و پرورش ؛

-         سازمانهای چاپ و نشر ؛

-         کتابخانه ها و مراکز اسناد ؛

-         رسانه های همگانی ، و بسیاری از سازمانهای دیگر ؛

 

4-2- اشخاص

-         نویسندگان ،  شاعران و روز نامه نگاران ؛

-        مترجمان و ویراستاران ؛

-        منتقدان ادبی ؛

-        زبانشناسان ؛

-        فرهنگ نگاران ؛

-        چکیده نویسان ؛

-        دستور نویسان ؛

-        اصطلاحشناسان ؛

-        برنامه سازان کامپیوتر ؛

  -  معلمان زبان و پژوهندگانی که از داده های زبانی به عنوان ماده اولیه کار خود بهره می گیرند .

 

6- مراحل اجرای طرح

 این طرح به طور کلی ، در سه دوره یا فاز متفاوت انجام می پذیرد :

-         دوره 1. گردآوری داده ها و فراهم آوردن واژه ها مه های بسامدی ؛

- دوره 2. سارماندهی و ایجاد پایگاه داده ها

- دوره3. بهره برداری ، نگهداری ، افزایش داده ها و روز آینده سازی پایگاه .

ترتیب زمانی ، زمانبندی تخمینی و ارتباط دوره ها به صورت زیر خواهند بود :  

 

  

7 ویژگیهای پایگاه داده ها

  در این طرح ، زبان فارسی و ساختار داده ها ، دارای مشخصات ویژه ای خواهند بود که در زیر تنها به چارچوب
 آنها اشاره می شود :

 

7 1 زبان فارسی

7 1 1 گستره و محدوده :

به طور کلی این اصطلاح می تواند همه گونه های گفتاری ، نوشتاری ، سبکی و کاربردی زبان را در همه دورانهای تحول آن دربرگیرد ؛ اما لازم است که محدوده آن به گونه ای مشخص گردد . از این رو ، نخست دو برش جداگانه تاریخی از آن در نظر می گیریم : اول زبان فارسی امروز یا فارسی معاصر ، و دیگری دورانهای گذشته زبان فارسی .

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

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

7 1 2 بخشهای سازنده پیکره زبانی

   برای فراهم آوردن پیکره زبانی فارسی امروز ، بابسته است مجموعه گوناگون و شاخصی از همه نمونه های مهم آن تا حد امکان را گردآورد . و برای این منظور ، یک بررسی دقیق آماری و مشاوره با کارشناسان گوناگون ضروری است؛ اما می توان پیش بینی کرد که نمونه هایی از هریک از منابع و گونه های زیر مورد نیاز باشد :

-         نمونه های شاخص نظم و نثر (مهمترین آثار ادبی )؛

-         نمونه های مهم متنهای علمی و آموزشی (رشته های گوناگون )؛

- نمونه های مهم از نشریات (مقاله های گوناگون در زمینه های ادبی ، فرهنگی،  اجتماعی ، سیاسی ، هنری ، علمی ، ورزشی و مانند اینها )؛

-  نمونه های مهم از گونه های گفتاری رسمی و غیر رسمی ( گفتارهای رادیویی و تلویزیونی ، مصاحبه ها ، گفتگوهای خودمانی ، مکالمه های تلفنی و مانند اینها که ضبط و بازنویسی شده باشند ) ؛

- فهرست های واژگانی برگرفته از فرهنگها و واژه نامه های عمومی و تخصصی و بسیاری منابع دیگر .

 

 

7 2 ساختار پایگاه :

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

7 2 1 پایگاه داده های پیوستار(Relational DATABASE):

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

 

7 2 2 شکل داده ها :

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

 7 2 3 پیوندهای میان داده ها:

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

 

8 مختصری پیرامون ویژگیهای هر دوره 

8 1 دوره اول:

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

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

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

 

8 2 دوره دوم :

این دوره ، می تواند همزمان با دوره 1 آغاز شده ، به موازات آن پیشرفت کند .

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

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

 

8 3 دوره سوم :

  این دوره ، پس از مرحله نصب و راه اندازی سیستم آغاز خواهد شد و مدت آن نامحدود خواهد بود ؛ چرا که شامل عملیات نگهداری ، بهره برداری ، روزآیند کردن ، بهبود و افزایش امکانات و داده های بانک می شود . در این دوره ، کار تهیه واژه نامه های بسامدی (دوره 1 )دنبال خواهد شد و نیز بانک داده های زبانی همواره فعال خواهد بود .

 

9 سازمان

  سازمان و تشکیلات این پایگاه ، به موازات پیشرفت آن و با آغاز هر مرحله تازه آن ، گسترش خواهد یافت و از نظر نیروی انسانی ، به همکاری گروهی از کارشناسان با تخصصهای زبان و زبانشناسی ، کامپیوتر ، و ادبیات در کنار کارکنان بخش اداری نیاز خواهد بود .

 

10 زمان بندی

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

 

پیوست الف :

چند نمونه موجود و فعال پایگاه داده های زبانی

در این پیوست ، ابتدا به چند پیکره زبانی بزرگ که خود اساس ایجاد پایگاهها و بانکهای داده های زبانی قرار گرفته اند اشاره می شود.
برخی از پیکره های زبانی که تنها برای زبان انگلیسی ایجاد شده است ، عبارت اند از :
1 – پیکره دانشگاه بر اون ( Brown University Corpus of American English) که در سال 1961 با بیش از 5 میلیون واژه نمونه از کتابها و مجلات منتشر شد در همان سال ایجاد شد .
 2-پیکره زبانی دانشگاه بیر منگام ( Birmingham University Corput) که از یک مجموعه متن زبان انگلیسی عمومی (با نزدیک به 20 میایون واژه )به مجموعه گوناگونی از متنهای تخصصی (با نزدیک به 20 میلیون واژه) مربوط به سالهای 1960 تا 1981 تشکیل شده است .
3 -پیکره زبانی مرکز پژوهشهای ارتباطی بل (Bellcore Corpora) مجموعه ای از متنهای زبان انگلیسی امروز (شامل 70 میلیون واژه از مرکز نیویورک تایمز از سال 1983 به بعد و متنهای گوناگون دیگر )
4- پیکره مشترک لانگمن – لانکاستر برای زبان انگلیسی (Longman – Lancaster English Language Corpus) با 30 تا 50 میلیون واژه از زبان انگلیسی گفتاری و نوشتاری .
5 -پیکره جهانی زبان انگلیسی (International Corpus of English , ICE ) طرحی برای گردأوری یک میلیون واژه از گونه های انگلیسی ، در سراسز جهان که در اوایل دهه 1990 آماده خواهد شد .
و بسیاری دیگر که برای آگاهی بیشتر درباره آنها ، می توان به منبع شماره 3 مراجعه کرد . در این کتاب ، بیش از 39 پیکره زبانی برای زبان انگلیسی و تعداد زیادی برای دورانهای گوناگون و آثار کلاسیک آن معرفی شده است .
همچنین مشخصات چندین پیکره بزرگ که برای زبان فرانسه فراهم شده ارائه گردیده ، از جمله : پیکره ARTEL که با همکاری مرکز ملی پژوشهای علمی فرانسه (CNRS) و دانشگاه شیکاگو از حدود 2000 متن برگزیده و 150 میلیون واژه تشکیل شده است . یا پیکره FRANTEXT که با 170 میلیو ن واژه برای فراهم أوردن مواد پایگاه داده های بزرگزبان فرانسه (Trexor de le Langue Francaisa  ) ایجاد شد .
در همین منبع ، پیکره های زبانی ایجاد شده برای بسیاری از زبانهای جهان ، از جمله : آلمانی ، ایتالیلیی ، اسپانیایی ، بیشتر زبانهای اسلاوی ، سوئدی ، نروژی ،هلندی ، عربی ، عبری ، ارمنی ، لاتینی ، یونانی ، ژاپنی ،و مانند اینها معرفی شده است .
در پی فراهم آوردن اینگونه مواد زبانی ، بسیاری از کشورها به ایجاد بانکهای داده های زبانی در سطح ملی پرداختند ، از جمله : کشور های فرانسه ، کانادا ، آلمان ، ایتالیا ، اسپانیا ، روسیه ، ایالات متحده ، هلند ، سوئد ، دانمارک ، انگلستان .
فراتر از این ،اکنون چندین بانک داده های زبانی و واژگانی ، در سطح جهانی به وسیله سازمانهای بین المللی ایجاد گردیده و مورد بهره برداری است . مثلا جامعه اروپا ، بانک داده های خود را از طریق سازمان جهانی استاندارد (EURONET ) از راه  ISONET و مرکز اطلاعات اصلاحشناسی جهانی ( Infoterm) از راه TERMNET ارائه می کنند (نگاه کنید به منابع شماره 4و 5 ).

ASP.NET و پایگاه داده – قسمت اول

در این مجموعه شما با اصول وروشهای استفاده از پایگاه داده در ASP.NET آشنا می شوید. 

در این مقاله شما در مورد کار با با پایگاه داده در ASP.NET آشنا خواهید شد. بدین معنا که در صدد هستیم تا رویه ای کلی از مفاهیم، روشها وابزارهای مورد استفاده در ASP.NET جهت برقراری ارتباط با پایگاه داده، نشان دادن داده ها، دستکاری داده ها، بهنگام سازی و... توسط اشیایی چون مهیا کننده های بانک های اطلاعاتی، DataSetها XML، و ... معرفی می شود.

اگر تا بحال با پایگاه داده کار نکرده اید شاید provider یک پایگاه داده برای شما نامفهوم باشـد. بطور خلاصه راهی را که باید طی کرد تا به پایگاه داده متصل شده، آنرا باز کرده و داده ها را دستکاری کرده و دستورات را اجرا نمود، بوسیله یک تهیه کننده اطلاعات مشخص می شود. در ASP.NET معمولا از دو روش برای این کار استفاده می شود. روش اول اینکه اگر پایگاه داده شما از نوع SQL Server باشد بایستی با مدل SQLClient کار کرد و اگر پایگاه داده شما غیر از SQL Server باشد (در حال حاضر) باید از روش دیگر یعنی مدل OleDb استفاده نمود. بعنوان مثال اگر پایگاه داده شما Oracle ،Sybase و یا Access باشد باید از روش OleDb استفاده کنید.

روش کار بدین صورت است که ابتدا بایستی فضانام زیر را در صفحاتی که از بانک اطلاعاتی استفاده می شود فراخوانی کرد:

<% @ Import NameSpace="System.Data" %>
<% @ Import NameSpace="System.Data.OleDb" %>

برای برقراری ارتباط با پایگاه معمولا از عبارت زیر استفاده می شود:

Dim ObjConn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; DataSource=e:dbusers.mdb")

که قسمت DataSource آدرس فایل پایگاه داده است که در اینجا یک بانک Access است. همانگونه که ملاحظه می کنید از رشته ارتباطی یا Connection String بعنوان پارامتر استفاده شده است و بوسیله متد Open ارتباط باز می شود:

objConn.Open()

لازم به توضیح است که در پایان کار بوسیله متد Close ارتباط را خاتمه می دهیم.

بمحض ارتباط با پایگاه داده می توان دستورات را به آن فرستاد. این کار معمولا بوسیله شی OleDbCommand انجام می شود. جهت انجام این کار می توان یک دستور SQL یا نام یک روال ذخیره شده (Stored Procedure) را مشخص نمود و بنا به مقتضیات می توان اعمال مختلفی را روی پایگاه پیاده نمود:

Dim objCommand As New OleDbCommand ( "Select * From users", objConn )

ملاحظه می کنید که کلاس Command از دو پارامتر رشته SQL و نام رشته ارتباطی برای فرستادن دستورات به پایگاه داده استفاده می کند. برای مثال آنچه را که در عبارت فوق دیدید می توان به بخشهای کوچکتر زیر تقسیم کرد.

ابتدا تعریف شی:

Dim objCommand As New OleDbCommand()

سپس نسبت دادن آن به رشته ارتباطی جهت برقراری ارتباط پایگاه:

objCommand.Connection= objConn

مشخص کردن عملیات مورد نظر بوسیله دستورات SQL:

objCommand.CommandText="Select * From Users"

حتی می توانید عملیات فوق را بصورت ذیل انجام دهید:

Dim objCommand As New OleDbCommand( SQL string, Connection string )

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

- از ExecuteNonQuery زمانی استفاده می شود که قصد برگرداندن داده ها از پایگاه مورد نظر نباشد مثلا در مواقعی که از دستورات SQL جهت درج (Insert) و بهنگام سازی (Update) استفاده شود.

objCommand.ExecuteNonQuery

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

Dim ObjRead As OleDbDataReader
objRead=objCommand.ExecuteReader

- برای دستکاری یک تک مقدار مشخص و مورد نظر از متد ExecuteScalar استفاده می شود.

برای خواندن داده ها معمولا از کلاس DataReader استفاده می شود -برای خواندن نه برای اضافه کردن یا بروز کردن- این شئ بصورت مستقیم به پایگاه داده دسترسی دارد و فقط خواندنی (Read Only) است. البته این خاصیت محدودیتی برای آن است اما برای خواندن ساده داده روشی کامل بشمار می رود.

Dim objReadaer As OleDbDataReader
objReader=objCommand.ExecuteReader
Whlie objReader.Read
Response.write(objReader.GetString(0)& " <br> " ) 
End While

عبارت فوق جهت نمایش و چاپ داده ها بکار می رود. متد Read خواندن را تا زمانیکه به پایان نتایج نرسد ادامه می دهد و عبارت objReader.GetString(0) برای برگرداندن نسخه رشته ای ستونهای رکورد کاربرد دارد. در لیست زیر چند متد دیگر برای برگرداندن مقادیر داده ای متغیرها آمده است:

GetBoolean(x) مقدار منطقی را بر می گرداند.
GetChar(x) مقدار کاراکتری را برمی گرداند.
Get DataTypeColumn(x) نوع داده را در ستون برمیگرداند.
GetString(x) مقداررشته ای را برمی گرداند.
و...

 

انواع رابطه ها در پایگاه داده

 

» همانگونه که میدانید یک فیلد می تواند از چندین رکورد و یک جدول از چند فیلد تشکیل شود ، با توجه به این مطلب یک پایگاه داده هم میتواند دارای چندین جدول باشد . حال هر یک از این جدول ها می توانند اطلاعاتی را در خود ذخیره کنند که با جدول دیگری در ارتباط باشد یا این که هیچگونه ارتباطی را بین آنها قایل نشویم . برای مثال ما جدولی داریم مخصوص نگهداری اطلاعات فردی افراد و در جدول دیگری اطلاعات مالی این افراد را نگهداری میکنیم . بدون شک باید بین این دو جدول ارتباطی وجود داشته باشد تا ما تشخیص دهیم که کدام اطلاعات مربوط به کدام فرد است . وظیفه برقراری این ارتباط بر عهده فیلد کلید یا ( Primary Kay )است که خود ما آن را تعیین میکنیم .

 

» معمولا هر جدول یک فیلد موسوم به فیلد کلید KeyField دارد که از آن برای حفظ یکپارچگی پایگاه داده و برقراری رابطه با جدول های دیگر استفاده می کند . هر جدول می تواند فقط یک فیلد کلید یا کلید اولیه داشته باشد ، ولی می تواند دارای چند فیلد خارجی Foreign Key باشد . نحوه نمایش داده ها را فیلد کلید اصلی کنترل می کند و از فیلد خارجی برای مرتب کردن جدول با جدول های دیگر استفاده می شود .

 

» برای ایجاد ارتباط بین جدول ها در محیط Access شما باید از منوی Tools گزینه Relationships را انتخاب کنید و پس از انتخاب جدول ها خواهید توانست بین آنها توسط فیلدهای کلید ارتباط با معنی ایجاد کنید .

 

_ ما توسط فیلد کلید می توانیم انواع روابط زیر را بین جدول ها ایجاد کنیم :

 

» رابطه یک به یک : در این نوع ارتباط فیلدی در جدول اول یا اصلی به عنوان فیلد کلید تعریف می شود و با فیلد دیگری که در جدول بعدی یا فرعی به عنوان فیلد کلید تعریف شده است ارتباط داده می شود . در این صورت اطلاعات موجود در فیلد جدول فرعی باید کاملا مشابه اطلاعات و داده های موجود در فیلد کلید اصلی اصلی باشد . یعنی برای هر رکورد موجود در فیلد کلید اصلی باید رکورد متناظر با آن در فیلد کلید فرعی موجود باشد . و نمی تواند رکورد تکراری در هر یک از جدول ها وجود داشته باشد .

 

 

 

» رابطه یک به چند : در این نوع ارتباط فیلد اشاره گر می تواند به چند رکورد در جدول های دیگر اشاره کند یا این که برای هر رکورد موجود در فیلد کلید اصلی چند رکورد متناظر با آن در جدول های دیگر موجود باشد .

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

 

نکته : ارتباط یک به چند مهمترین و پر کاربرد ترین ارتباط موجود در میان جدول ها محسوب میشود .

 

 

 

» رابطه چند به چند : به دلیل این که این نوع ارتباط پیچیدگی زیادی داشته و در مواقع بسیار استثنایی از آن استفاده می شود و خوب ، البته من هم آشنایی چندانی یا بهتر بگم هیچ آشنایی با این نوع رابطه ندارم از شرح آن خود داری میکنم . امیدوارم که منو درک کنید .

 

خلاصه مطلب : ساخت برنامه هایی که از پایگاه داده در سطح گسترده ای استفاده می کنند بدون ایجاد ارتباط بین جدول ها توسط فیلد های کلید امکان پذیر نیست .

انواع رابطه ها در پایگاه داده

 

» همانگونه که میدانید یک فیلد می تواند از چندین رکورد و یک جدول از چند فیلد تشکیل شود ، با توجه به این مطلب یک پایگاه داده هم میتواند دارای چندین جدول باشد . حال هر یک از این جدول ها می توانند اطلاعاتی را در خود ذخیره کنند که با جدول دیگری در ارتباط باشد یا این که هیچگونه ارتباطی را بین آنها قایل نشویم . برای مثال ما جدولی داریم مخصوص نگهداری اطلاعات فردی افراد و در جدول دیگری اطلاعات مالی این افراد را نگهداری میکنیم . بدون شک باید بین این دو جدول ارتباطی وجود داشته باشد تا ما تشخیص دهیم که کدام اطلاعات مربوط به کدام فرد است . وظیفه برقراری این ارتباط بر عهده فیلد کلید یا ( Primary Kay )است که خود ما آن را تعیین میکنیم .

 

» معمولا هر جدول یک فیلد موسوم به فیلد کلید KeyField دارد که از آن برای حفظ یکپارچگی پایگاه داده و برقراری رابطه با جدول های دیگر استفاده می کند . هر جدول می تواند فقط یک فیلد کلید یا کلید اولیه داشته باشد ، ولی می تواند دارای چند فیلد خارجی Foreign Key باشد . نحوه نمایش داده ها را فیلد کلید اصلی کنترل می کند و از فیلد خارجی برای مرتب کردن جدول با جدول های دیگر استفاده می شود .

 

» برای ایجاد ارتباط بین جدول ها در محیط Access شما باید از منوی Tools گزینه Relationships را انتخاب کنید و پس از انتخاب جدول ها خواهید توانست بین آنها توسط فیلدهای کلید ارتباط با معنی ایجاد کنید .

 

_ ما توسط فیلد کلید می توانیم انواع روابط زیر را بین جدول ها ایجاد کنیم :

 

» رابطه یک به یک : در این نوع ارتباط فیلدی در جدول اول یا اصلی به عنوان فیلد کلید تعریف می شود و با فیلد دیگری که در جدول بعدی یا فرعی به عنوان فیلد کلید تعریف شده است ارتباط داده می شود . در این صورت اطلاعات موجود در فیلد جدول فرعی باید کاملا مشابه اطلاعات و داده های موجود در فیلد کلید اصلی اصلی باشد . یعنی برای هر رکورد موجود در فیلد کلید اصلی باید رکورد متناظر با آن در فیلد کلید فرعی موجود باشد . و نمی تواند رکورد تکراری در هر یک از جدول ها وجود داشته باشد .

 

 

 

» رابطه یک به چند : در این نوع ارتباط فیلد اشاره گر می تواند به چند رکورد در جدول های دیگر اشاره کند یا این که برای هر رکورد موجود در فیلد کلید اصلی چند رکورد متناظر با آن در جدول های دیگر موجود باشد .

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

 

نکته : ارتباط یک به چند مهمترین و پر کاربرد ترین ارتباط موجود در میان جدول ها محسوب میشود .

 

 

 

» رابطه چند به چند : به دلیل این که این نوع ارتباط پیچیدگی زیادی داشته و در مواقع بسیار استثنایی از آن استفاده می شود و خوب ، البته من هم آشنایی چندانی یا بهتر بگم هیچ آشنایی با این نوع رابطه ندارم از شرح آن خود داری میکنم . امیدوارم که منو درک کنید .

 

خلاصه مطلب : ساخت برنامه هایی که از پایگاه داده در سطح گسترده ای استفاده می کنند بدون ایجاد ارتباط بین جدول ها توسط فیلد های کلید امکان پذیر نیست .