HTML DOM-ում օբյեկտների հիերարխիայի օրինակ

DOM (անգլ.՝ Document Object Model` «փաստաթղթի օբյեկտային մոդել»), իրենից ներկայացոնւմ է անկախ ծրագրային ինտերֆեյս է, որը թույլ է տալիս ծրագրերին և սկրիպտներին մուտք գործել HTML, XHTML և XML փաստաթղթերի բովանդակություն, ինչպես նաև փոփոխել այդ փաստաթղթերի բովանդակությունը, կառուցվածքը և ձևավորումը։

DOM մոդելը չի սահմանափակում փաստաթղթերի կառուցվածքը։Dom-ի միջոցով հայտնի կառույցի ցանկացած փաստաթուղթ կարող է ներկայացվել որպես հանգույցների ծառ, որի յուրաքանչյուր հանգույցը իրենից ներկայացնում է տարր, հատկանիշ, տեքստային, գրաֆիկական կամ ցանկացած այլ օբյեկտ: Հանգույցները միմյանց հետ կապված են «ծնող-դուստր» հարաբերություններով։

Ի սկզբանե տարբեր բրաուզերներ ունեին փաստաթղթերի սեփական մոդելները (DOM), որոնք անհամատեղելի էին մյուսների հետ։ Փոխադարձ և հետադարձ համատեղելիության ապահովման համար W3C միջազգային կոնսորցիումի մասնագետները դասակարգել են այս մոդելը ըստ մակարդակների, որոնցից յուրաքանչյուրի համար ստեղծվել է իր դասակարգումը։ Այս բոլոր առանձնահատկությունները միավորված են W3C DOM անունը կրող ընդհանուր խմբում:

Մեկ այլ ծրագրավորաման ինտերֆեյս, որը կոչվում է JDOM, ապահովում է ավելի բարձր մակարդակ Java-ում XML փաստաթղթերի հետ աշխատելու համար, քան W3C DOM-ն է։

Պատմություն խմբագրել

DOM-ի պատմությունը միահյուսվում է 1990-ականների վերջին «բրաուզերային պատերազմների» պատմությանը, Netscape Navigator-ի և Microsoft Internet Explorer-ի (և առաջին սկրիպտային լեզուներ JavaScript-ի և JScript-ի) միջև, վեբ-էջերի շարադրման մեխանիզմում լայնորեն օգտագործելու համար։

Ավանդական DOM խմբագրել

Javascript ծրագրավորման լեզուն թողարկվել է Netscape Communication ընկերության կողմից 1995 թվականին, որպես Netscape Navigator 2.0 վեբ բրաուզերի մաս։ Netscape-ի մրցակից [[Մայքրոսոֆթ|Microsoft]] ընկերությունը նույն տարում թողարկեց Internet Explorer 3.0 JavaScript պորտով, որը կոչվում է JScript: Javascript-ը և JScript-ը թույլ են տալիս ծրագրավորողներին ստեղծել վեբ-կայքեր, որոնք ինտերակտիվ են հաճախորդի կողմից։ Օգտատիրոջ կողմից ստեղծված իրադարձությունները հայտնաբերելու և այս լեզուների առաջին սերնդում html փաստաթուղթը փոփոխելու անսահմանափակ հնարավորությունը, ի վերջո, հայտնի դարձան որպես «DOM Level 0» կամ «Ավանդական DOM»։ «DOM մակարդակ 0»-ի համար ոչ մի հատուկ ստանդարտներ չկային, այն մասամբ նկարագրված է HTML4 բնութագրում։

Ավանդական DOM-ը սահմանափակված էր տարրերի տեսակներով, որոնց կարելի էր մուտք գործել։ Այնպիսի տարրեր, ինչպիսիք են ձևը (form), հղումը (link) և պատկերը (image), կարելի է մուտք գործել հիերարխիկ անունների միջոցով, որոնք սկսվել էին փաստաթղթի արմատից։ Հիերարխիկ անունը կարող է օգտագործել կամ անունը, կամ տարրի հերթական ինդեքսը։ Օրինակ, form input տարրը կարող է հասանելի լինել որպես document.formName.inputName կամ որպես document.forms[0].elements[0]:

Ավանդական DOM-ը հնարավորություն էր տալիս հաճախորդի մասի ձևի հաստատում և հայտնի «transformation object» էֆեկտը։

Միջանկյալ DOM խմբագրել

1997 թվականին Netscape-ը և Microsoft-ը թողարկեցին իրենց վեբ բրաուզերները՝ Netscape Navigator և Internet Explorer 4.0 համապատասխանաբար՝ ավելացնելով Dynamic HTML (DHTML) աջակցությունը, որն ապահովում է HTML փաստաթղթի ֆունկցիոնալությունը փոխելու հնարավորություն, երբ այն բեռնվում է: DHTML-ը պահանջում էր ընդլայնումներ փաստաթղթի պարզ օբյեկտի համար, որը գտնվել է ավանդական DOM-ի իրականացման մեջ: Քանի որ JScript-ը հիմնված էր JavaScript-ի վրա, ավանդական DOM-ի իրականացումները հիմնականում փոխգործունակ էին, սակայն DHTML DOM ընդլայնումները մշակվում էին զուգահեռաբար բրաուզերներից յուրաքանչյուրի կողմից և մնացին անհամատեղելի: DOM-ի այս տարբերակները հայտնի են դարձել որպես «միջանկյալ DOM»:

Միջանկյալ DOM-ը հնարավորություն տվեց մանիպուլյացիայի ենթարկել կասկադային ոճի թերթիկների (անգլ. CSS) հատկությունները՝ ազդելով փաստաթղթի ցուցադրման վրա։ Այն նաև ապահովում էր մուտք դեպի նոր հատկություն, որը կոչվում է layers՝ document.layers (Netscape Navigator-ում) և document.all (Internet Explorer-ում) հատկությունների միջոցով: Միջանկյալ DOM-ում նախնական անհամատեղելիությունների պատճառով վեբ մշակումը պահանջում էր հատուկ մշակում յուրաքանչյուր դեպքի համար:

Netscape Navigator-ի հետագա տարբերակները դադարեցրին միջանկյալ DOM-ի աջակցությունը: Internet Explorer-ը շարունակում է աջակցել իր միջանկյալ DOM-ին հետադարձ համատեղելիության համար:

Ստանդարտացում խմբագրել

 
WHATWG DOM

1994 թվականին ստեղծված World Wide Web Consortium (W3C) կազմակերպությունը World Wide Web-ի բաց չափորոշիչը պահպանելու և զարգացնելու համար հարկադրեց Netscape Communications, Microsoft, Էփլ և այլ ընկերություններին մշակելու բրաուզերի վրա հիմնված սկրիպտային լեզուների չափորոշիչ՝ ECMAScript անվամբ։ Չափորոշչի առաջին տարբերակը հրապարակվել է 1997 թվականին։ Javascript-ի և [[JScript|JScript-ի] հետագա թողարկումները սկսեցին կիրառել ECMAScript չափորոշիչը՝ ավելի լավ բրաուզերների համատեղելիության համար: ECMAScript-ի թողարկումից հետո W3C-ն սկսեց աշխատել DOM-ի ստանդարտացման վրա։ DOM-ի սկզբնական չափորոշիչը, որը նաև հայտնի է որպես DOM մակարդակ 1, 1998 թվականի վերջին առաջարկվել է W3C-ի կողմից։ Մոտավորապես մինույն թողարկվեց Internet Explorer 5․0-ն՝ DOM 1-ին մակարդակի սահմանափակ աջակցությամբ: DOM 1-ին մակարդակը տրամադրեց ամբողջական օբյեկտի մոդել ամբողջ HTML կամ XML փաստաթղթի համար, ներառյալ փաստաթղթի ցանկացած մաս փոխելու հնարավորություն: Չհարմարեցված բրաուզերները (օրինակ՝ Internet Explorer 4.x, Netscape 4.x) լայնորեն օգտագործվում էին մինչև 2000 թվականը։

DOM-ի մակարդակ 2-ը հրապարակվել է 2000 թվականի վերջին։ Նա ներկայացրեց getElementById ֆունկցիան, ինչպես նաև իրադարձությունների մոդելը և աջակցությունը XML namespace-ի և CSS-ի համար: DOM մակարդակ 3-ը, որը հրապարակվել է 2004 թվականի ապրիլին, ավելացրել է XPath-ի աջակցություն և ստեղնաշարի իրադարձությունների մշակում, ինչպես նաև ինտերֆեյս՝ փաստաթուղթը XML-ով սերիականացման համար:

2005 թվականին W3C DOM-ի մեծ մասն ապահովվում էր ECMAScript-ին համապատասխանող հիմնական բրաուզերների կողմից, ներառյալ Internet Explorer 6.x (2001 թվական), Opera, Safari և Gecko վեբ-շարժիչի վրա հիմնված բրաուզերները (ներառյալ Mozilla, Firefox, SeaMonkey և Camino):

DOM-ի իրականացումը վեբ-բրաուզերներում խմբագրել

Հաշվի առնելով վեբ բրաուզերներում DOM-ի տարբեր իրականացումների առկայությունը, ծրագրավորողների շրջանում սովորական սովորություն է նախ ստուգել DOM-ի որոշ գործառույթների ֆունկցիոնալությունը յուրաքանչյուր կոնկրետ բրաուզերի համար և միայն դրանից հետո օգտագործել դրանք: Ստորև բերված կոդը ցույց է տալիս W3C DOM ստանդարտների համար բրաուզերը վավերացնելու միջոց՝ նախքան կոդ գործարկելը, որը կախված է այդ վավերացման արդյունքից:

  
if (document.getElementById && document.getElementsByTagName) {
    // если методы getElementById и getElementsByTagName
    // доступны, то можно относительно точно предположить поддержку W3CDOM.
 
    obj = document.getElementById("navigation")
    // далее идёт другой код с использованием возможностей W3CDOM.
    // ….
}

Եվս մեկ կոդի օրինակ գրված Javascript լեզվով, որը թույլ է տալիս փորձարկել DOM-ի տարբեր ընդլայնումների համար հայտարարված աջակցությունը որոշակի վեբ-բրաուզերում:

 
  function domImplementationTest(){
    var featureArray = ['HTML', 'XML', 'Core', 'Views',
                        'StyleSheets', 'CSS', 'CSS2', 'Events',
                        'UIEvents', 'MouseEvents', 'HTMLEvents',
                        'MutationEvents', 'Range', 'Traversal'];
    var versionArray = ['1.0', '2.0', '3.0'];
    var i;
    var j;
    if(document.implementation && document.implementation.hasFeature){
      for(i=0; i < featureArray.length; i++){
        for(j=0; j < versionArray.length; j++){
          document.write(
            'Поддержка расширения '+ featureArray[i] + ' версии ' + versionArray[j] + ': ' + 
            (document.implementation.hasFeature(featureArray[i], versionArray[j]) ? 
            '<span style="color:green">true</span>': '<span style="color:red">false</span>') + '<br/>'
          );
        }
        document.write('<br/>');
      }
    }
  }

Քանի որ DOM-ն աջակցում է նավիգացիան դեպի ցանկացած տարածք (օրինակ՝ ծնող և նախորդ եղբայրը կամ քույրը) և ընդունում է կամայական փոփոխություններ, իրականացումը պետք է առնվազն բուֆերացնի փաստաթուղթը, որը (կամ որի մշակված ձևը) կարդացվել է մինչ այս անգամ:

Բրաուզերի շարժիչ խմբագրել

Բրաուզերները հենվում են իրենց շարժիչի վրա՝ HTML ֆայլերը DOM-ին փոխարկելիս (վերլուծելիս): Որոշ բրաուզերի շարժիչներ, օրինակ՝ Trident / MSHTML, ինչ-որ կերպ կապված են որոշակի բրաուզերի հետ (այս դեպքում՝ Internet Explorer): Շարժիչներ, ինչպիսիք են WebKit-ը և Gecko-ն, օգտագործվում են բազմաթիվ տարբեր բրաուզերներում, ինչպիսիք են Safari-ը, Google Chrome-ը, RockMelt-ը, Firefox-ը կամ Flock-ը: Բրաուզերի տարբեր շարժիչներ աջակցում են DOM չափորոշիչներին հետևողականության տարբեր մակարդակներում:

W3C DOM մակարդակներ խմբագրել

DOM-ի ներկայիս դասակարգման մակարդակը համարվում է մակարդակ 2-ը, բայց մակարդակ 3-ի որոշ դասակարգումներ խորհուրդ է տրվում W3C-ի կողմից։

Մակարդակ 0 Ներառում է իր մեջ DOM-ի բոլոր մոդելների դասակարգումները, որոնք գոյություն ունեին մինչ մակարդակը 1-ը, օրինակ, document.images, document.forms, document.layers և document.all։ Անհրաժեշտ է ուշադրություն դարձնել, որ այս մոդելները պաշտոնապես չեն համարվում W3C-ի կողմից հրապարակված DOM-ի դասակարգումներ։ Դրանք տեղեկություն են այն մասին, թե ինչ է գոյություն ունեցել մինչ դասակարգման գործընթացը։ Մակարդակ 1 DOM-ի (HTML և XML) բազային ֆունկցիոնալ հնարավորություննրը փաստաթղթերում, այնպիսին են ինչպիսին փաստաթղթի ծառի հանդույցները՝ տվյալներ փոփոխելու և ավելացնելու հնարավորությամբ։ Մակարդակ 2 Այսպես կոչված XML <--filtered views--> անվանատարածքի աջակցություն և իրադարձություններ։ Մակարդակ 3 Կազմված է 6 բազմազան դասակարգումներից։

  1. DOM Level 3 Core;
  2. DOM Level 3 Load and Save;
  3. DOM Level 3 XPath;
  4. DOM Level 3 Views and Formatting;
  5. DOM Level 3 Requirements;
  6. DOM Level 3 Validation.
Դասակարգումները համարվում են DOM-ի լրացուցիչ ընդլայնումներ։

Հավելվածներ խմբագրել

վեբ-բրաուզերներ խմբագրել

Վեբ-բրաուզերները պարտավոր չեն օգտագործել DOM՝ HTML փաստաթուղթը օգտագործելու համար։ Այնուամենայնիվ, DOM-ը պահանջվում է JavaScript սկրիպտների համար, որոնք ցանկանում են դինամիկ կերպով դիտել կամ փոփոխել վեբ էջը: Այլ կերպ ասած, Document Object Model-ը այն գործիքն է, որով JavaScript-ը տեսնում է HTML էջի բովանդակությունը և բրաուզերի վիճակը:

Խնդիրներ խմբագրել

Բրաուզերի անհամատեղելիության պատճառով DOM-ի օգտագործումը երբեմն հանգեցնում է HTML դասավորության դժվարությունների և էջի ցածր հուսալիության:

Դասակարգում խմբագրել

Տես նաև խմբագրել

Արտաքին հղումներ խմբագրել