GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GeezerVison is showing python.github.io — xml.dom --- API مدل شیء سند
|
رابط |
بخش |
هدف |
|---|---|---|
رابطی برای پیادهسازی زیربنایی. |
||
رابط پایه برای بیشتر شیءها در یک سند. |
||
رابطی برای دنبالهای از گرهها. |
||
اطلاعات مربوط به اعلانهای مورد نیاز برای پردازش یک سند. |
||
شیءای که نشاندهندهی یک سند کامل است. |
||
گرههای عنصر در سلسلهمراتب سند. |
||
گرههای مقدار صفت روی گرههای عنصر. |
||
بازنمایی کامنتها در سند منبع. |
||
گرههای حاوی محتوای متنی سند. |
||
بازنمایی دستورالعمل پردازش. |
بخش دیگری، استثناهای تعریفشده برای کار با DOM در پایتون را شرح میدهد.
رابط DOMImplementation راهی را برای برنامهها فراهم میکند تا در دسترس بودن ویژگیهای خاصی را در DOM مورد استفادهشان تعیین کنند. سطح ۲ DOM همچنین توانایی ایجاد اشیای جدید Document و DocumentType را با استفاده از DOMImplementation افزود.
اگر قابلیت مشخصشده با جفت رشتهی feature و version پیادهسازی شده باشد، True برگردانده میشود.
یک شیء جدید Document (ریشهی DOM) را برمیگرداند، بههمراه یک شیء فرزند از نوع Element که دارای namespaceUri و qualifiedName دادهشده است. doctype باید یک شیء DocumentType باشد که با createDocumentType() ایجاد شده است، یا None باشد. در API DOM پایتون، دو آرگومان نخست نیز میتوانند None باشند تا نشان دهند که هیچ فرزندی از نوع Element قرار نیست ایجاد شود.
یک شیء جدید DocumentType برمیگرداند که رشتههای qualifiedName، publicId و systemId دادهشده را دربر میگیرد و نشاندهنده اطلاعات موجود در اعلان نوع سند XML است.
همهی کامپوننتهای یک سند XML، زیرکلاسهایی از Node هستند.
فقط گرههای از نوعهای زیر میتوانند فرزند داشته باشند، و فقط فرزندان از نوعهای فهرستشده:
Documentحداکثر یک Element، حداکثر یک DocumentType، ProcessingInstruction و Comment
DocumentFragment و ElementElement، Text، CDATASection، ProcessingInstruction و Comment
Attrگرههای از نوعهای دیگر نمیتوانند فرزند داشته باشند. درج فرزند از نوعی مجاز نیست، استثنای HierarchyRequestErr را پرتاب میکند.
یک عدد صحیح که نوع گره را نشان میدهد. ثابتهای نمادین برای نوعها در شیء Node قرار دارند. این یک ویژگی فقطخواندنی است.
ثابتهای عدد صحیح برای مقادیر ممکن ویژگی nodeType.
والد گره فعلی، یا None برای گره سند. مقدار همیشه یک شیء Node یا None است. برای گرههای Element، این، عنصر والد خواهد بود، بهجز عنصر ریشه، که در این صورت شیء Document خواهد بود. برای گرههای Attr، این همیشه None است. این یک ویژگی فقطخواندنی است.
یک NamedNodeMap از اشیای صفت. تنها عناصر برای این ویژگی مقادیر واقعی دارند؛ سایر موارد برای این ویژگی None ارائه میدهند. این یک ویژگی فقطخواندنی است.
گرهای که بلافاصله پیش از این گره و با همان والد قرار دارد. برای مثال، المانی که برچسب پایانی آن درست پیش از برچسب آغازین المان self قرار میگیرد. البته، اسناد XML تنها از المانها تشکیل نشدهاند، بنابراین همسطح قبلی (previous sibling) میتواند متن، کامنت یا چیز دیگری باشد. اگر این گره اولین فرزند والد باشد، این ویژگی None خواهد بود. این یک ویژگی فقطخواندنی است.
گرهای که بلافاصله پس از این گره و با همان والد میآید. همچنین previousSibling را ببینید. اگر این گره آخرین فرزند والد باشد، این ویژگی None خواهد بود. این ویژگی فقطخواندنی است.
یک NodeList از فرزندان این گره. اگر گره فرزندی نداشته باشد، فهرست خالی است. این یک ویژگی فقطخواندنی است.
اولین فرزند گره، در صورت وجود، یا None. این یک ویژگی فقطخواندنی است.
آخرین فرزند گره، در صورت وجود، یا None. این یک ویژگی فقطخواندنی است.
بخش از tagName که پس از دونقطه میآید اگر وجود داشته باشد، در غیر این صورت کل tagName. مقدار یک رشته است.
بخش از tagName که پیش از دونقطه میآید اگر وجود داشته باشد، در غیر این صورت رشته خالی. مقدار یک رشته است، یا None.
فضای نام مرتبط با نام عنصر. این مقدار یک رشته یا None خواهد بود. این یک ویژگی فقطخواندنی است.
شیء Document که این گره به آن تعلق دارد، یا None برای خودِ سند. این یک ویژگی فقطخواندنی است.
برگردانید که آیا پیادهسازی DOM یک feature خاص را پشتیبانی میکند، همانطور که DOMImplementation.hasFeature() میکند.
data را با key در این گره مرتبط کنید و دادهی قبلی مرتبط با key را برگردانید، یا None. اگر data برابر None باشد، ارتباط حذف میشود. هندلر زمانی فراخوانی میشود که گره کپی، وارد، تغییر نام یا حذف شود؛ اگر اعلان نیاز نباشد None را پاس دهید.
دادهی مرتبط با key در این گره توسط setUserData() را برگردانید، یا None.
نام این گره، بسته به نوع آن؛ جدول زیر را ببینید. شما همیشه میتوانید اطلاعاتی که اینجا به دست میآورید را از ویژگی دیگری مانند ویژگی tagName برای المانها یا ویژگی name برای ویژگیها دریافت کنید. این یک ویژگی فقطخواندنی است.
مقدار این گره، بسته به نوع آن؛ جدول زیر را ببینید. مقدار یک رشته یا None است.
مقادیر nodeName و nodeValue برای هر نوع گره عبارتند از:
نوع گره |
nodeName |
nodeValue |
|---|---|---|
|
محتوا |
|
|
محتوا |
|
|
|
|
|
|
|
|
||
|
||
نام موجودیت |
|
|
نام نمادگذاری |
|
|
|
محتوا |
اگر گره دارای ویژگیای باشد، True را برمیگرداند.
اگر گره دارای گرههای فرزند باشد، True را برمیگرداند.
اگر other به همان گرهای اشاره کند که این گره به آن اشاره دارد، True را برمیگرداند. این موضوع بهویژه برای پیادهسازیهای DOM که از هر نوع معماری پراکسی (proxy architecture) استفاده میکنند، مفید است (زیرا بیش از یک شیء میتواند به یک گره اشاره کند).
نکته
این مبتنی بر یک API پیشنهادی DOM سطح ۳ است که هنوز در مرحلهی «پیشنویس کاری» قرار دارد، اما به نظر میرسد این رابط خاص بدون مناقشه است. تغییرات از سوی W3C لزوماً این متد را در رابط DOM پایتون تحت تأثیر قرار نخواهد داد (اگرچه هر API جدید W3C برای این منظور نیز پشتیبانی خواهد شد).
یک گره فرزند جدید را در انتهای فهرست فرزندان به این گره اضافه میکند و newChild را برمیگرداند. اگر گره از قبل در درخت وجود داشته باشد، ابتدا حذف میشود.
یک گرهی فرزند جدید را قبل از یک فرزند موجود درج کنید. باید refChild فرزند این گره باشد؛ در غیر این صورت، NotFoundErr پرتاب میشود. newChild بازگردانده میشود. اگر refChild برابر None باشد، newChild را در پایان فهرست فرزندان درج میکند.
یک گرهی فرزند را حذف کنید. oldChild باید فرزند این گره باشد؛ در غیر این صورت، NotFoundErr پرتاب میشود. در صورت موفقیت، oldChild بازگردانده میشود. اگر oldChild بیشتر استفاده نشود، باید متد unlink() آن فراخوانی شود.
یک گرهی موجود را با یک گرهی جدید جایگزین کنید. باید oldChild فرزند این گره باشد؛ در غیر این صورت، NotFoundErr پرتاب میشود.
گرههای متنی مجاور را ادغام کنید تا تمام بخشهای متن بهعنوان نمونههای واحد Text ذخیره شوند. این کار پردازش متن از درخت DOM را برای بسیاری از کاربردها سادهتر میکند.
این گره را رونویسی کنید. تنظیم deep به معنای رونوشت تمام گرههای فرزند نیز است. این، گره رونوشتشده را بازمیگرداند.
یک NodeList نمایانگر یک دنباله از گرههاست. این اشیاء در دو روش در توصیهی هستهی DOM استفاده میشوند: یک شیء Element یکی را به عنوان فهرست گرههای فرزند خود فراهم میکند، و متدهای getElementsByTagName() و getElementsByTagNameNS() کلاس Node اشیاء با این رابط را برای نمایش نتایج پرسوجو بازمیگردانند.
NodeList از Node ارثبری نمیکند.
توصیهنامهی DOM Level 2 یک متد و یک ویژگی برای این اشیاء تعریف میکند:
آیتم i-ام را از دنباله بازگردانید، یا None اگر i خارج از محدوده باشد. اندیسهای منفی پشتیبانی نمیشوند.
تعداد گرههای موجود در دنباله.
علاوه بر این، رابط DOM پایتون نیاز دارد که پشتیبانی بیشتری ارائه شود تا امکان استفاده از اشیاء NodeList بهعنوان دنبالههای پایتون فراهم شود. تمام پیادهسازیهای NodeList باید شامل پشتیبانی از __len__() و __getitem__() باشند؛ این امر امکان پیمایش روی NodeList در دستورات for و پشتیبانی مناسب از تابع توکار len() را فراهم میکند.
اگر یک پیادهسازی DOM از تغییر سند پشتیبانی کند، پیادهسازی NodeList نیز باید از متدهای __setitem__() و __delitem__() پشتیبانی کند.
اطلاعاتی درباره نمادگذاریها و موجودیتهای اعلامشده توسط یک سند (شامل زیرمجموعهی خارجی اگر پارسر از آن استفاده کند و بتواند اطلاعات را فراهم کند) از یک شیء DocumentType در دسترس است. DocumentType یک سند از ویژگی doctype شیء Document در دسترس است؛ اگر اعلان DOCTYPE برای سند وجود نداشته باشد، ویژگی doctype سند به جای یک نمونه از این رابط، برابر None تنظیم خواهد شد.
DocumentType یک نوع تخصصی از Node است و ویژگیهای زیر را اضافه میکند:
شناسهی عمومی برای زیرمجموعهی خارجی تعریف نوع سند، یا None اگر اعلان DOCTYPE آن را مشخص نکند.
شناسهی سیستمی، یک URI، برای زیرمجموعهی خارجی تعریف نوع سند، یا None اگر اعلان DOCTYPE آن را مشخص نکند.
رشتهای که زیرمجموعهی داخلی کامل سند را ارائه میدهد. این شامل کروشههایی که زیرمجموعه را دربرمیگیرند، نمیشود. اگر سند زیرمجموعهی داخلی نداشته باشد، این مقدار باید None باشد.
نام عنصر ریشه، همانگونه که در اعلامیه DOCTYPE آمده است، در صورت وجود.
این یک NamedNodeMap از نودهای Entity است که تعاریف موجودیتهای خارجی را میدهند. برای نامهای موجودیت که بیش از یک بار تعریف شدهاند، فقط اولین تعریف ارائه میشود (سایر موارد طبق توصیه XML نادیده گرفته میشوند). این ممکن است None باشد اگر اطلاعات توسط پارسر ارائه نشده باشد، یا اگر هیچ موجودیتی تعریف نشده باشد.
این یک NamedNodeMap از نودهای Notation است که تعاریف نمادگذاریها را میدهند. برای نامهای نمادگذاری که بیش از یک بار تعریف شدهاند، فقط اولین تعریف ارائه میشود (سایر موارد طبق توصیه XML نادیده گرفته میشوند). این ممکن است None باشد اگر اطلاعات توسط پارسر ارائه نشده باشد، یا اگر هیچ نمادگذاریی تعریف نشده باشد.
یک Document نشاندهندهی یک سند XML کامل است، شامل عناصر تشکیلدهندهی آن، ویژگیها، دستورالعملهای پردازشی، کامنتها و غیره. به خاطر داشته باشید که این کلاس خصوصیات را از Node به ارث میبرد.
یگانه عنصر ریشهی سند.
نود DocumentType سند، یا None. این یک ویژگی فقطخواندنی است.
شیء DOMImplementation که این سند را ایجاد کرده است. این یک ویژگی فقطخواندنی است.
آیا بررسی خطا اعمال میشود.
موقعیت سند، یا None در صورت ناشناخته بودن.
ایجاد و برگرداندن یک نود DocumentFragment خالی.
ایجاد و برگرداندن یک نود CDATASection حاوی data.
یک کپی از importedNode که متعلق به این سند است برگردانید. نود اصلی از سند خود حذف نمیشود. اگر deep صحیح باشد، نودهای فرزند نود نیز کپی میشوند.
ایجاد و برگرداندن یک نود المان جدید. المان هنگام ایجاد در سند درج نمیشود. شما باید به صراحت آن را با یکی از متدهای دیگر مانند insertBefore() یا appendChild() درج کنید.
یک المان جدید با فضای نام بسازید و برگردانید. tagName میتواند پیشوند داشته باشد. المان هنگام ایجاد در سند درج نمیشود. شما باید به صراحت آن را با یکی از متدهای دیگر مانند insertBefore() یا appendChild() درج کنید.
یک گره متنی حاوی دادهای که بهعنوان پارامتر داده شده است را ایجاد میکند و برمیگرداند. مانند سایر متدهای ایجاد، این متد گره را در درخت درج نمیکند.
یک گره کامنت حاوی دادهای که بهعنوان پارامتر ارسال میشود ایجاد میکند و آن را برمیگرداند. همانند سایر متدهای ایجاد، این متد گره را در درخت درج نمیکند.
یک گره دستور پردازش حاوی target و data که بهعنوان پارامتر ارسال شدهاند ایجاد میکند و بازمیگرداند. مانند سایر متدهای ایجاد، این متد گره را در درخت درج نمیکند.
یک گره ویژگی بسازید و برگردانید. این متد گره ویژگی را با هیچ المان خاصی مرتبط نمیکند. شما باید از setAttributeNode() روی شیء Element مناسب استفاده کنید تا از نمونه ویژگی تازه ساختهشده بهرهمند شوید.
یک گره ویژگی با فضای نام بسازید و برگردانید. tagName میتواند پیشوند داشته باشد. این متد گره ویژگی را با هیچ المان خاصی مرتبط نمیکند. شما باید از setAttributeNode() روی شیء Element مناسب استفاده کنید تا از نمونه ویژگی تازه ساختهشده بهرهمند شوید.
المانی که دارای شناسه داده شده است را برگردانید، یا None. تنها ویژگیهایی که در DTD یا توسط Element.setIdAttribute() به عنوان نوع ID اعلام شدهاند جستجو میشوند.
جستجو برای همهی نوادگان (فرزندان مستقیم، فرزندان فرزندان و غیره) با نام نوع عنصر معین.
جستوجوی همهی نوادگان (فرزندان مستقیم، فرزندان فرزندان و غیره) با یک URI فضای نام و نام محلی (localname) معین. نام محلی (localname) بخشی از فضای نام است که پس از پیشوند قرار دارد.
نام گره المان یا ویژگی n را تغییر دهید و آن را برگردانید. namespaceURI URI فضای نام جدید است، یا EMPTY_NAMESPACE اگر گره متعلق به فضای نام نباشد. name نام کامل جدید است.
WrongDocumentErr را اگر n توسط سند دیگری ساخته شده باشد، و NotSupportedErr را اگر نه المان باشد نه ویژگی، پرتاب کنید.
Element زیرکلاسی از Node است، بنابراین تمام ویژگیهای آن کلاس را به ارث میبرد.
نام نوع عنصر. در سندی که از فضای نام استفاده میکند، ممکن است حاوی دونقطه باشد. مقدار آن یک رشته است.
اعلام کنید که ویژگی name از نوع ID است، تا المان توسط Document.getElementById() یافت شود. NotFoundErr را اگر المان چنین ویژگیای نداشته باشد پرتاب کنید.
مشابه setIdAttribute()، اما برای ویژگی مشخص شده با URI فضای نام و نام محلی.
مشابه setIdAttribute()، اما برای یک گره ویژگی که قبلاً بازیابی شده است.
اگر عنصر دارای ویژگیای به نام name باشد، True را بازمیگرداند.
اگر عنصر دارای صفتی باشد که با namespaceURI و localName نامگذاری شده است، True برمیگرداند.
مقدار ویژگی با نام name را بهصورت یک رشته برمیگرداند. اگر چنین ویژگیای وجود نداشته باشد، یک رشته خالی برگردانده میشود، گویی که ویژگی مقداری ندارد.
مقدار ویژگی با نام تعیینشده توسط namespaceURI و localName را بهصورت یک رشته برمیگرداند. اگر چنین ویژگیای وجود نداشته باشد، یک رشته خالی برگردانده میشود، گویی که ویژگی مقداری ندارد.
مقدار یک ویژگی را با توجه به namespaceURI و localName بهصورت یک گره برمیگرداند.
یک ویژگی را با نام حذف کنید.
در صورت وجود، oldAttr را از فهرست ویژگیها حذف و برمیگرداند. اگر oldAttr وجود نداشته باشد، NotFoundErr پرتاب میشود.
یک ویژگی را با نام حذف کنید. توجه کنید که از localName استفاده میکند، نه qname.
تنظیم مقدار یک ویژگی از یک رشته.
یک نود ویژگی جدید به المان اضافه کنید، در صورت لزوم یک ویژگی موجود را جایگزین کنید اگر ویژگی name مطابقت داشته باشد. اگر جایگزینی رخ دهد، نود ویژگی قدیمی بازگردانده میشود. اگر newAttr از قبل در حال استفاده باشد، InuseAttributeErr صادر میشود.
یک نود ویژگی جدید به المان اضافه کنید، در صورت لزوم یک ویژگی موجود را جایگزین کنید اگر ویژگیهای namespaceURI و localName مطابقت داشته باشند. اگر جایگزینی رخ دهد، نود ویژگی قدیمی بازگردانده میشود. اگر newAttr از قبل در حال استفاده باشد، InuseAttributeErr صادر میشود.
مقدار یک ویژگی را از یک رشته، با داشتن namespaceURI و qname تنظیم کنید. توجه داشته باشید که qname کل نام ویژگی است. این مورد با مورد بالا متفاوت است.
Attr از Node ارث میبرد، بنابراین تمام ویژگیهای آن را به ارث میبرد.
نودهای ویژگی بخشی از درخت سند نیستند. آنها در نگاشت attributes یک المان قرار دارند، نه در فرزندان آن، و parentNode، previousSibling و nextSibling آنها همیشه None هستند.
نام ویژگی. در سندی که از فضای نام استفاده میکند، ممکن است شامل دونقطه باشد.
بخشی از نام که پس از دونقطه میآید، اگر دونقطهای وجود داشته باشد، در غیر این صورت کل نام. این یک ویژگی فقطخواندنی است.
بخشی از نام که پیش از دونقطه قرار دارد، در صورت وجود دونقطه، و در غیر این صورت رشته خالی.
آیا این ویژگی از نوع ID است، یا به دلیل اینکه در DTD به این صورت اعلام شده است یا به دلیل استفاده از Element.setIdAttribute(). این یک ویژگی فقطخواندنی است.
نود Element که این ویژگی متعلق به آن است، یا None اگر استفاده نشده باشد. این یک ویژگی فقطخواندنی است.
آیا مقدار ویژگی به صراحت در سند تنظیم شده است، برخلاف پیشفرض بودن از DTD. این یک ویژگی فقطخواندنی است.
NamedNodeMap از Node ارث نمیبرد.
طول فهرست ویژگیها.
یک ویژگی با یک اندیس خاص را برگردانید. ترتیبی که ویژگیها در آن دریافت میشوند دلخواه است اما برای عمر یک DOM ثابت خواهد بود. هر آیتم یک نود ویژگی است. مقدار آن را با ویژگی value بدست آورید.
نودی را که name داده شده را دارد برگردانید، یا None اگر چنین نودی وجود نداشته باشد.
نودِ با فضای نام و نام محلی دادهشده را برگردانید، یا None اگر چنین نودی وجود نداشته باشد.
node را به نگاشت اضافه کنید، با استفاده از name آن به عنوان کلید. نودی که جایگزین میشود را برگردانید، یا None اگر نودی جایگزین نشده باشد.
node را به نگاشت اضافه کنید، با استفاده از فضای نام و نام محلی آن به عنوان کلید. نودی که جایگزین میشود را برگردانید، یا None اگر نودی جایگزین نشده باشد.
نود با name دادهشده را حذف و برگردانید. اگر چنین نودی وجود نداشته باشد، NotFoundErr را پرتاب کنید.
نود با فضای نام و نام محلی دادهشده را حذف و برگردانید. اگر چنین نودی وجود نداشته باشد، NotFoundErr را پرتاب کنید.
شما همچنین میتوانید از خانوادهی متدهای استاندارد getAttribute*() روی شیءهای Element استفاده کنید.
DocumentFragment یک ظرف سبکوزن از نودها است. این یک زیرکلاس از Node است. وقتی در درخت سند وارد میشود، فرزندان آن به جای خود وارد میشوند، و خالی میشود.
CharacterData دادههای شبیه متن در سند XML را نشان میدهد. این یک زیرکلاس از Node است، و کلاس پایهی Text، CDATASection و Comment است. چنین نودها نمیتوانند نودهای فرزند داشته باشند.
محتوای گره به صورت یک رشته.
Comment یک کامنت در سند XML را نشان میدهد. این یک زیرکلاس از CharacterData است.
محتوای کامنت بهصورت یک رشته. این ویژگی تمام نویسههای بین <!-- آغازین و --> پایانی را در بر دارد، اما خود آنها را شامل نمیشود.
رابط Text متن در سند XML را نشان میدهد. اگر پارسر و پیادهسازی DOM از گسترش XMLِ DOM پشتیبانی کنند، بخشهای متنی که در بخشهای نشانهگذاریشده CDATA محصور شدهاند در شیءهای CDATASection ذخیره میشوند. این دو رابط یکسان هستند، اما مقادیر متفاوتی برای ویژگی nodeType فراهم میکنند.
Text رابط CharacterData را گسترش میدهد، و CDATASection Text را گسترش میدهد.
محتوای گره متنی بهعنوان یک رشته.
متنِ تمام نودهای Text بهصورت منطقی مجاور به این نود، در ترتیبِ سند الحاق شدهاند. این یک ویژگی فقطخواندنی است.
متنِ تمام نودهای Text بهصورت منطقی مجاور به این نود را با content جایگزین کنید، و نودهای دیگر را حذف کنید. این نود را برگردانید، یا None اگر content خالی باشد.
این نود را در offset به دو نود تقسیم کنید، با نگهداشتن بخش اول در این نود و برگرداندن یک نود همسایه جدید با باقیمانده.
نکته
استفاده از یک گره CDATASection نشان نمیدهد که آن گره یک بخش نمادگذاریشدهی CDATA کامل را نمایندگی میکند، بلکه تنها نشان میدهد که محتوای گره بخشی از یک بخش CDATA بوده است. یک بخش CDATA ممکن است توسط بیش از یک گره در درخت سند نمایندگی شود. هیچ راهی برای تعیین اینکه آیا دو گره CDATASection مجاور، بخشهای نمادگذاریشدهی CDATA متفاوتی را نمایندگی میکنند یا خیر، وجود ندارد.
نشاندهندهی یک دستور پردازشی (processing instruction) در سند XML است؛ این مورد از رابط Node ارثبری میکند و نمیتواند دارای گرههای فرزند باشد.
محتوای دستورالعمل پردازشی تا نخستین نویسه فضای سفید. این یک ویژگی فقطخواندنی است.
محتوای دستورالعمل پردازش پس از نخستین نویسه فضای سفید.
Entity یک موجودیت تجزیهشده یا تجزیهنشده را که در DTD اعلام شده است، نشان میدهد. این یک زیرکلاس از Node است. نودهای موجودیت در DocumentType.entities قرار دارند و نمیتوان آنها را در درخت سند درج کرد. نام موجودیت، nodeName آن است.
شناسهی عمومی موجودیت، یا None اگر مشخص نشده باشد. این یک ویژگی فقطخواندنی است.
شناسهی سیستمی موجودیت، یا None اگر مشخص نشده باشد. این یک ویژگی فقطخواندنی است.
نام نمادگذاری برای یک موجودیت تجزیهنشده، یا None برای یک موجودیت تجزیهشده. این یک ویژگی فقطخواندنی است.
Notation یک نمادگذاری را که در DTD اعلام شده است، نشان میدهد. این یک زیرکلاس از Node است و نمیتواند نودهای فرزند داشته باشد. نودهای نمادگذاری در DocumentType.notations قرار دارند و نمیتوان آنها را در درخت سند درج کرد. نام نمادگذاری، nodeName آن است.
شناسهی عمومی نمادگذاری، یا None اگر مشخص نشده باشد. این یک ویژگی فقطخواندنی است.
شناسهی سیستمی نمادگذاری، یا None اگر مشخص نشده باشد. این یک ویژگی فقطخواندنی است.
توصیهنامهی DOM Level 2 یک استثنای واحد، DOMException، و تعدادی ثابت تعریف میکند که به برنامهها امکان میدهند تعیین کنند چه نوع خطایی رخ داده است. نمونههای DOMException دارای ویژگی code هستند که مقدار مناسب برای آن استثنای خاص را فراهم میکند.
رابط DOM پایتون ثابتها را فراهم میکند، اما مجموعه استثناها را نیز گسترش میدهد تا برای هر یک از کدهای استثنای تعریفشده توسط DOM، یک استثنای مشخص وجود داشته باشد. پیادهسازیها باید استثنای مشخص مناسب را پرتاب کنند، که هر کدام مقدار مناسبی برای ویژگی code دارند.
کلاس استثنای پایه که برای تمام استثناهای خاص DOM استفاده میشود. این کلاس استثنا نمیتواند مستقیماً نمونهسازی شود.
زمانی پرتاب میشود که محدودهی مشخصشدهای از متن در یک رشته جا نشود. شناخته نیست که این مورد در پیادهسازیهای DOM پایتون استفاده شود، اما ممکن است از پیادهسازیهای DOM که با پایتون نوشته نشدهاند دریافت شود.
هنگامی که تلاشی برای درج یک گره در جایی که نوع گره مجاز نیست، انجام شود، پرتاب میشود.
هنگامی که یک پارامتر اندیس یا اندازهی یک متد منفی باشد یا از مقادیر مجاز فراتر رود، پرتاب میشود.
هنگامی که تلاشی برای درج یک گره Attr که از قبل در جای دیگری از سند وجود دارد انجام شود، پرتاب میشود.
در صورتی که پارامتر یا عملیاتی توسط شیء زیرین پشتیبانی نشود، پرتاب میشود.
این استثنا زمانی پرتاب میشود که یک پارامتر رشتهای شامل نویسهای باشد که در زمینهای که در آن به کار میرود، از نظر توصیهنامهی XML 1.0 مجاز نیست. برای مثال، تلاش برای ایجاد یک گره Element با یک فاصله در نام نوع عنصر، باعث پرتاب این خطا میشود.
هنگامی که تلاشی برای تغییر نوع یک گره انجام شود، پرتاب میشود.
هنگامی پرتاب میشود که تلاشی برای استفاده از شیءای انجام شود که تعریفنشده است یا دیگر قابل استفاده نیست.
اگر تلاشی برای تغییر هر شیء به شکلی که با توجه به توصیهنامهی Namespaces in XML مجاز نیست صورت گیرد، این استثنا پرتاب میشود.
استثنا برای زمانی که گرهای در زمینه ارجاعشده وجود ندارد. برای مثال، NamedNodeMap.removeNamedItem() این استثنا را در صورتی پرتاب میکند که گره دادهشده در نگاشت وجود نداشته باشد.
هنگامی پرتاب میشود که پیادهسازی از نوع شیء یا عملیات درخواستشده پشتیبانی نکند.
این استثنا در صورتی پرتاب میشود که داده برای گرهای تعیین شود که از داده پشتیبانی نمیکند.
در صورت تلاش برای تغییر یک شیء در شرایطی که تغییر مجاز نیست (مانند گرههای فقطخواندنی) پرتاب میشود.
هنگامی که یک رشتهی نامعتبر یا غیرمجاز مشخص شود، پرتاب میشود.
این استثنا زمانی رخ میدهد که یک عملیات باعث میشود سند از نظر اعتبار جزئی نامعتبر شود. این مورد در پیادهسازیهای DOM پایتون شناخته نشده است، اما ممکن است از پیادهسازیهای DOM که به زبان پایتون نوشتهنشدهاند دریافت شود.
زمانی پرتاب میشود که گرهای در سندی متفاوت از سندی که در حال حاضر به آن تعلق دارد درج شود، و پیادهسازی از انتقال گره از یک سند به سند دیگر پشتیبانی نکند.
کدهای استثنای تعریفشده در توصیهنامه DOM، مطابق این جدول به استثناهای شرحدادهشده در بالا نگاشت میشوند:
ثابت |
استثنا |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
این بخش الزامات انطباق و روابط میان API DOM پایتون، توصیهنامههای DOM W3C و نگاشت OMG IDL برای پایتون را شرح میدهد.
انواع IDL استفادهشده در مشخصات DOM، مطابق جدول زیر به انواع پایتون نگاشت میشوند.
نوع IDL |
نوع پایتون |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
نگاشت از OMG IDL به پایتون، توابع دسترسیگر را برای اعلانهای attribute در IDL تقریباً به همان شیوهای که نگاشت جاوا انجام میدهد، تعریف میکند. نگاشت اعلانهای IDL
readonly attribute string someValue; attribute string anotherValue;
سه تابع دسترسیگر تولید میکند: یک متد «get» برای someValue (_get_someValue())، و متدهای «get» و «set» برای anotherValue (_get_anotherValue() و _set_anotherValue()). بهطور خاص، این نگاشت نیازی ندارد که ویژگیهای IDL بهعنوان ویژگیهای معمول پایتون قابلدسترسی باشند: object.someValue لزوماً کار نمیکند و ممکن است یک AttributeError ایجاد کند.
با این حال، API DOM پایتون الزام میکند که دسترسی عادی به ویژگیها کار کند. این بدان معناست که جانشینهای معمول (surrogates) تولیدشده توسط کامپایلرهای IDL پایتون احتمالاً کار نخواهند کرد، و اگر به اشیاء DOM از طریق CORBA دسترسی پیدا شود، ممکن است در سمت کلاینت به اشیاء پوششی نیاز باشد. اگرچه این موضوع مستلزم ملاحظات اضافی برای کلاینتهای DOM CORBA است، پیادهسازان باتجربه در استفاده از DOM بر بستر CORBA از پایتون، این را مشکل نمیدانند. ویژگیهایی که readonly اعلام شدهاند، ممکن است در همه پیادهسازیهای DOM دسترسی نوشتن را محدود نکنند.
در API DOM پایتون، نیازی به توابع دسترسی (accessor) نیست. در صورت ارائه، این توابع باید از شکل تعریفشده در نگاشت IDL پایتون (Python IDL mapping) پیروی کنند، اما این متدها غیرضروری تلقی میشوند، زیرا ویژگیها مستقیماً از پایتون قابلدسترسی هستند. برای ویژگیهای readonly هرگز نباید توابع دسترسی "Set" ارائه شوند.
تعاریف IDL بهطور کامل نیازمندیهای W3C DOM API را پوشش نمیدهند، مانند مفهومِ برخی اشیاء، مانند مقدار بازگشتیِ getElementsByTagName()، که «زنده» هستند. Python DOM API از پیادهسازیها نمیخواهد که چنین نیازمندیهایی را اعمال کنند.