xml.dom --- API مدل شیء سند

کد منبع: Lib/xml/dom/__init__.py


مدل شیء سند یا «DOM»، یک API میان‌زبانی از کنسرسیوم وب جهان‌گستر (W3C) برای دسترسی و اصلاح اسناد XML است. یک پیاده‌سازی DOM، سند XML را به‌عنوان یک ساختار درختی ارائه می‌کند یا به کد کلاینت اجازه می‌دهد چنین ساختاری را از پایه بسازد. سپس از طریق مجموعه‌ای از شیءها که رابط‌های شناخته‌شده را فراهم می‌کنند، به این ساختار دسترسی می‌دهد.

DOM برای برنامه‌های دسترسی تصادفی بسیار مفید است. SAX تنها به شما اجازه می‌دهد در هر زمان نمایی از یک بخش از سند را داشته باشید. اگر به یک عنصر SAX نگاه می‌کنید، به عنصر دیگری دسترسی ندارید. اگر به یک گره متنی نگاه می‌کنید، به عنصر حاوی آن دسترسی ندارید. هنگامی که یک برنامه SAX می‌نویسید، باید موقعیت برنامه‌تان در سند را در جایی از کد خودتان پیگیری کنید. SAX این کار را برای شما انجام نمی‌دهد. همچنین، اگر نیاز داشته باشید در سند XML جلوتر را ببینید، شانسی ندارید.

برخی برنامه‌ها به‌سادگی در یک مدل رویدادمحور بدون دسترسی به یک درخت امکان‌پذیر نیستند. البته شما می‌توانید خودتان نوعی درخت را در رویدادهای SAX بسازید، اما DOM به شما امکان می‌دهد از نوشتن آن کد اجتناب کنید. DOM یک نمایش درختی استاندارد برای داده‌های XML است.

مدل شیء سند (DOM) توسط W3C به‌صورت مرحله‌ای، یا به اصطلاح آن‌ها در «سطوح»، تعریف می‌شود. نگاشت پایتون برای این API عمدتاً بر پایه توصیه‌نامه DOM سطح ۲ است.

برنامه‌های DOM معمولاً با تجزیه‌ی مقداری XML به یک DOM آغاز می‌شوند. نحوه‌ی انجام این کار به‌هیچ‌وجه در سطح ۱ DOM پوشش داده نشده است و سطح ۲ فقط بهبودهای محدودی ارائه می‌دهد: یک کلاس شیء DOMImplementation وجود دارد که دسترسی به متدهای ایجاد Document را فراهم می‌کند، اما هیچ راهی برای دسترسی به یک خواننده/پارسر/سازنده‌ی Document برای XML به‌صورت مستقل از پیاده‌سازی وجود ندارد. همچنین هیچ راه خوش‌تعریفی برای دسترسی به این متدها بدون یک شیء Document موجود وجود ندارد. در پایتون، هر پیاده‌سازی DOM تابع getDOMImplementation() را ارائه خواهد داد. سطح ۳ DOM مشخصات Load/Store را اضافه می‌کند که رابطی برای خواننده تعریف می‌کند، اما این مورد هنوز در کتابخانه استاندارد پایتون در دسترس نیست.

هنگامی که یک شیء سند DOM داشته باشید، می‌توانید از طریق ویژگی‌ها و متدهای آن به بخش‌های سند XML خود دسترسی داشته باشید. این ویژگی‌ها در مشخصات DOM تعریف شده‌اند؛ این بخش از راهنمای مرجع، تفسیر این مشخصات در پایتون را توضیح می‌دهد.

مشخصات ارائه‌شده توسط W3C، DOM API را برای Java، ECMAScript و OMG IDL تعریف می‌کند. نگاشت پایتون تعریف‌شده در اینجا تا حد زیادی بر نسخه‌ی IDL این مشخصات مبتنی است، اما رعایت دقیق الزامی نیست (اگرچه پیاده‌سازی‌ها آزادند از نگاشت دقیق IDL پشتیبانی کنند). برای بحث مفصل درباره‌ی الزامات نگاشت، بخش انطباق را ببینید.

همچنین ملاحظه نمائید

مشخصات سطح ۲ مدل شیء سند (DOM)

توصیه‌نامه‌ی W3C که API DOM پایتون بر آن مبتنی است.

مشخصات سطح ۱ مدل شیء سند (DOM)

توصیه‌نامه‌ی W3C برای DOM که توسط xml.dom.minidom پشتیبانی می‌شود.

مشخصات نگاشت زبان پایتون

این، نگاشت از OMG IDL به پایتون را مشخص می‌کند.

محتوای ماژول

xml.dom شامل توابع زیر است:

xml.dom.registerDOMImplementation(name, factory)

تابع factory را با نام name ثبت کنید. تابع کارخانه باید شیءای را برگرداند که رابط DOMImplementation را پیاده‌سازی می‌کند. تابع کارخانه می‌تواند هر بار همان شیء را برگرداند، یا برای هر فراخوانی یک شیء جدید را برگرداند، بسته به آنچه برای پیاده‌سازی خاص مناسب است (مثلاً اگر آن پیاده‌سازی از برخی سفارشی‌سازی‌ها پشتیبانی کند).

xml.dom.getDOMImplementation(name=None, features=())

یک پیاده‌سازی DOM مناسب برگردانید. name یا به‌خوبی شناخته‌شده است، یا نام ماژول یک پیاده‌سازی DOM، یا None. اگر None نباشد، ماژول متناظر را ایمپورت می‌کند و اگر ایمپورت موفقیت‌آمیز باشد، یک شیء DOMImplementation برمی‌گرداند. اگر نامی داده نشده باشد، و اگر متغیر محیطی PYTHON_DOM تنظیم شده باشد، این متغیر برای یافتن پیاده‌سازی استفاده می‌شود. تنها نام به‌خوبی شناخته‌شده در کتابخانه استاندارد 'minidom' است، برای xml.dom.minidom.

اگر نام داده نشده باشد، این تابع پیاده‌سازی‌های موجود را بررسی می‌کند تا پیاده‌سازی‌ای با مجموعه ویژگی‌های مورد نیاز یابد. اگر هیچ پیاده‌سازی‌ای یافت نشد، یک ImportError پرتاب می‌کند. فهرست ویژگی‌ها باید یک دنباله از جفت‌های (feature, version) باشد که به متد hasFeature() روی شیء‌های موجود DOMImplementation پاس داده می‌شوند.

همچنین برخی ثابت‌های کاربردی نیز ارائه شده‌اند:

xml.dom.EMPTY_NAMESPACE

مقداری که برای نشان دادن اینکه هیچ فضای نامی با یک گره در DOM مرتبط نیست، استفاده می‌شود. این مقدار معمولاً به عنوان namespaceURI یک گره یافت می‌شود، یا به عنوان پارامتر namespaceURI به یک متد مختص فضای نام استفاده می‌شود.

xml.dom.XML_NAMESPACE

URI فضای نام مرتبط با پیشوند محفوظ xml، همان‌طور که در Namespaces in XML (بخش ۴) تعریف شده است.

xml.dom.XMLNS_NAMESPACE

URI فضای نام برای اعلان‌های فضای نام، همان‌طور که در Document Object Model (DOM) Level 2 Core Specification (بخش ۱.۱.۸) تعریف شده است.

xml.dom.XHTML_NAMESPACE

URI فضای نام XHTML، همان‌طور که در XHTML 1.0: The Extensible HyperText Markup Language (بخش 3.1.1) تعریف شده است.

علاوه بر این، xml.dom یک کلاس پایه Node و کلاس‌های استثنای DOM را شامل می‌شود. کلاس Node ارائه شده توسط این ماژول هیچ‌یک از متدها یا ویژگی‌های تعریف شده در مشخصات DOM را پیاده‌سازی نمی‌کند؛ پیاده‌سازی‌های واقعی DOM باید آن‌ها را فراهم کنند. کلاس Node ارائه شده به عنوان بخشی از این ماژول، ثابت‌های استفاده شده برای ویژگی nodeType روی شیء‌های واقعی Node را فراهم می‌کند؛ این ثابت‌ها در داخل کلاس قرار دارند نه در سطح ماژول، تا با مشخصات DOM سازگار باشند.

اشیاء در DOM

مستندات قطعی برای DOM، مشخصات DOM از W3C است.

نام‌های مستند شده در این بخش رابط‌های DOM هستند. با استثنای Node و کلاس‌های استثنا، آن‌ها توسط خود ماژول xml.dom ارائه نمی‌شوند، بلکه توسط پیاده‌سازی‌های واقعی DOM، مانند xml.dom.minidom فراهم می‌شوند.

توجه داشته باشید که ویژگی‌های DOM را می‌توان به‌جای رشته‌های ساده، به‌عنوان گره‌ها نیز دستکاری کرد. با این حال، نیاز به انجام این کار نسبتاً نادر است، بنابراین این کاربرد هنوز مستند نشده است.

رابط

بخش

هدف

DOMImplementation

اشیاء DOMImplementation

رابطی برای پیاده‌سازی زیربنایی.

Node

اشیای Node

رابط پایه برای بیشتر شیء‌ها در یک سند.

NodeList

اشیای NodeList

رابطی برای دنباله‌ای از گره‌ها.

DocumentType

اشیای DocumentType

اطلاعات مربوط به اعلان‌های مورد نیاز برای پردازش یک سند.

Document

اشیای سند

شیءای که نشان‌دهنده‌ی یک سند کامل است.

Element

اشیاء عنصر

گره‌های عنصر در سلسله‌مراتب سند.

Attr

اشیای Attr

گره‌های مقدار صفت روی گره‌های عنصر.

Comment

اشیای کامنت

بازنمایی کامنت‌ها در سند منبع.

Text

اشیای Text و CDATASection

گره‌های حاوی محتوای متنی سند.

ProcessingInstruction

اشیای ProcessingInstruction

بازنمایی دستورالعمل پردازش.

بخش دیگری، استثناهای تعریف‌شده برای کار با DOM در پایتون را شرح می‌دهد.

اشیاء DOMImplementation

رابط DOMImplementation راهی را برای برنامه‌ها فراهم می‌کند تا در دسترس بودن ویژگی‌های خاصی را در DOM مورد استفاده‌شان تعیین کنند. سطح ۲ DOM همچنین توانایی ایجاد اشیای جدید Document و DocumentType را با استفاده از DOMImplementation افزود.

DOMImplementation.hasFeature(feature, version)

اگر قابلیت مشخص‌شده با جفت رشته‌ی feature و version پیاده‌سازی شده باشد، True برگردانده می‌شود.

DOMImplementation.createDocument(namespaceUri, qualifiedName, doctype)

یک شیء جدید Document (ریشه‌ی DOM) را برمی‌گرداند، به‌همراه یک شیء فرزند از نوع Element که دارای namespaceUri و qualifiedName داده‌شده است. doctype باید یک شیء DocumentType باشد که با createDocumentType() ایجاد شده است، یا None باشد. در API DOM پایتون، دو آرگومان نخست نیز می‌توانند None باشند تا نشان دهند که هیچ فرزندی از نوع Element قرار نیست ایجاد شود.

DOMImplementation.createDocumentType(qualifiedName, publicId, systemId)

یک شیء جدید DocumentType برمی‌گرداند که رشته‌های qualifiedName، publicId و systemId داده‌شده را دربر می‌گیرد و نشان‌دهنده اطلاعات موجود در اعلان نوع سند XML است.

اشیای Node

همه‌ی کامپوننت‌های یک سند XML، زیرکلاس‌هایی از Node هستند.

فقط گره‌های از نوع‌های زیر می‌توانند فرزند داشته باشند، و فقط فرزندان از نوع‌های فهرست‌شده:

Document

حداکثر یک Element، حداکثر یک DocumentType، ProcessingInstruction و Comment

DocumentFragment و Element

Element، Text، CDATASection، ProcessingInstruction و Comment

Attr

Text

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

Node.nodeType

یک عدد صحیح که نوع گره را نشان می‌دهد. ثابت‌های نمادین برای نوع‌ها در شیء Node قرار دارند. این یک ویژگی فقط‌خواندنی است.

Node.ELEMENT_NODE
Node.ATTRIBUTE_NODE
Node.TEXT_NODE
Node.CDATA_SECTION_NODE
Node.ENTITY_REFERENCE_NODE
Node.ENTITY_NODE
Node.PROCESSING_INSTRUCTION_NODE
Node.COMMENT_NODE
Node.DOCUMENT_NODE
Node.DOCUMENT_TYPE_NODE
Node.DOCUMENT_FRAGMENT_NODE
Node.NOTATION_NODE

ثابت‌های عدد صحیح برای مقادیر ممکن ویژگی nodeType.

Node.parentNode

والد گره فعلی، یا None برای گره سند. مقدار همیشه یک شیء Node یا None است. برای گره‌های Element، این، عنصر والد خواهد بود، به‌جز عنصر ریشه، که در این صورت شیء Document خواهد بود. برای گره‌های Attr، این همیشه None است. این یک ویژگی فقط‌خواندنی است.

Node.attributes

یک NamedNodeMap از اشیای صفت. تنها عناصر برای این ویژگی مقادیر واقعی دارند؛ سایر موارد برای این ویژگی None ارائه می‌دهند. این یک ویژگی فقط‌خواندنی است.

Node.previousSibling

گره‌ای که بلافاصله پیش از این گره و با همان والد قرار دارد. برای مثال، المانی که برچسب پایانی آن درست پیش از برچسب آغازین المان self قرار می‌گیرد. البته، اسناد XML تنها از المان‌ها تشکیل نشده‌اند، بنابراین هم‌سطح قبلی (previous sibling) می‌تواند متن، کامنت یا چیز دیگری باشد. اگر این گره اولین فرزند والد باشد، این ویژگی None خواهد بود. این یک ویژگی فقط‌خواندنی است.

Node.nextSibling

گره‌ای که بلافاصله پس از این گره و با همان والد می‌آید. همچنین previousSibling را ببینید. اگر این گره آخرین فرزند والد باشد، این ویژگی None خواهد بود. این ویژگی فقط‌خواندنی است.

Node.childNodes

یک NodeList از فرزندان این گره. اگر گره فرزندی ن‌داشته باشد، فهرست خالی است. این یک ویژگی فقط‌خواندنی است.

Node.firstChild

اولین فرزند گره، در صورت وجود، یا None. این یک ویژگی فقط‌خواندنی است.

Node.lastChild

آخرین فرزند گره، در صورت وجود، یا None. این یک ویژگی فقط‌خواندنی است.

Node.localName

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

Node.prefix

بخش از tagName که پیش از دو‌نقطه می‌آید اگر وجود داشته باشد، در غیر این صورت رشته خالی. مقدار یک رشته است، یا None.

Node.namespaceURI

فضای نام مرتبط با نام عنصر. این مقدار یک رشته یا None خواهد بود. این یک ویژگی فقط‌خواندنی است.

Node.ownerDocument

شیء Document که این گره به آن تعلق دارد، یا None برای خودِ سند. این یک ویژگی فقط‌خواندنی است.

Node.isSupported(feature, version)

برگردانید که آیا پیاده‌سازی DOM یک feature خاص را پشتیبانی می‌کند، همان‌طور که DOMImplementation.hasFeature() می‌کند.

Node.setUserData(key, data, handler)

data را با key در این گره مرتبط کنید و داده‌ی قبلی مرتبط با key را برگردانید، یا None. اگر data برابر None باشد، ارتباط حذف می‌شود. هندلر زمانی فراخوانی می‌شود که گره کپی، وارد، تغییر نام یا حذف شود؛ اگر اعلان نیاز نباشد None را پاس دهید.

Node.getUserData(key)

داده‌ی مرتبط با key در این گره توسط setUserData() را برگردانید، یا None.

Node.nodeName

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

Node.nodeValue

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

مقادیر nodeName و nodeValue برای هر نوع گره عبارتند از:

نوع گره

nodeName

nodeValue

Attr

name

value

CDATASection

'#cdata-section'

محتوا

Comment

'#comment'

محتوا

Document

'#document'

None

DocumentFragment

'#document-fragment'

None

DocumentType

name

None

Element

tagName

None

Entity

نام موجودیت

None

Notation

نام نمادگذاری

None

ProcessingInstruction

target

data

Text

'#text'

محتوا

Node.hasAttributes()

اگر گره دارای ویژگی‌ای باشد، True را برمی‌گرداند.

Node.hasChildNodes()

اگر گره دارای گره‌های فرزند باشد، True را برمی‌گرداند.

Node.isSameNode(other)

اگر other به همان گره‌ای اشاره کند که این گره به آن اشاره دارد، True را برمی‌گرداند. این موضوع به‌ویژه برای پیاده‌سازی‌های DOM که از هر نوع معماری پراکسی (proxy architecture) استفاده می‌کنند، مفید است (زیرا بیش از یک شیء می‌تواند به یک گره اشاره کند).

توجه

این مبتنی بر یک API پیشنهادی DOM سطح ۳ است که هنوز در مرحله‌ی «پیش‌نویس کاری» قرار دارد، اما به نظر می‌رسد این رابط خاص بدون مناقشه است. تغییرات از سوی W3C لزوماً این متد را در رابط DOM پایتون تحت تأثیر قرار نخواهد داد (اگرچه هر API جدید W3C برای این منظور نیز پشتیبانی خواهد شد).

Node.appendChild(newChild)

یک گره فرزند جدید را در انتهای فهرست فرزندان به این گره اضافه می‌کند و newChild را برمی‌گرداند. اگر گره از قبل در درخت وجود داشته باشد، ابتدا حذف می‌شود.

Node.insertBefore(newChild, refChild)

یک گره‌ی فرزند جدید را قبل از یک فرزند موجود درج کنید. باید refChild فرزند این گره باشد؛ در غیر این صورت، NotFoundErr پرتاب می‌شود. newChild بازگردانده می‌شود. اگر refChild برابر None باشد، newChild را در پایان فهرست فرزندان درج می‌کند.

Node.removeChild(oldChild)

یک گره‌ی فرزند را حذف کنید. oldChild باید فرزند این گره باشد؛ در غیر این صورت، NotFoundErr پرتاب می‌شود. در صورت موفقیت، oldChild بازگردانده می‌شود. اگر oldChild بیشتر استفاده نشود، باید متد unlink() آن فراخوانی شود.

Node.replaceChild(newChild, oldChild)

یک گره‌ی موجود را با یک گره‌ی جدید جایگزین کنید. باید oldChild فرزند این گره باشد؛ در غیر این صورت، NotFoundErr پرتاب می‌شود.

Node.normalize()

گره‌های متنی مجاور را ادغام کنید تا تمام بخش‌های متن به‌عنوان نمونه‌های واحد Text ذخیره شوند. این کار پردازش متن از درخت DOM را برای بسیاری از کاربردها ساده‌تر می‌کند.

Node.cloneNode(deep)

این گره را رونویسی کنید. تنظیم deep به معنای رونوشت تمام گره‌های فرزند نیز است. این، گره رونوشت‌شده را بازمی‌گرداند.

اشیای NodeList

یک NodeList نمایانگر یک دنباله از گره‌هاست. این اشیاء در دو روش در توصیه‌ی هسته‌ی DOM استفاده می‌شوند: یک شیء Element یکی را به عنوان فهرست گره‌های فرزند خود فراهم می‌کند، و متدهای getElementsByTagName() و getElementsByTagNameNS() کلاس Node اشیاء با این رابط را برای نمایش نتایج پرس‌وجو بازمی‌گردانند.

NodeList از Node ارث‌بری نمی‌کند.

توصیه‌نامه‌ی DOM Level 2 یک متد و یک ویژگی برای این اشیاء تعریف می‌کند:

NodeList.item(i)

آیتم i-ام را از دنباله بازگردانید، یا None اگر i خارج از محدوده باشد. اندیس‌های منفی پشتیبانی نمی‌شوند.

NodeList.length

تعداد گره‌های موجود در دنباله.

علاوه بر این، رابط DOM پایتون نیاز دارد که پشتیبانی بیشتری ارائه شود تا امکان استفاده از اشیاء NodeList به‌عنوان دنباله‌های پایتون فراهم شود. تمام پیاده‌سازی‌های NodeList باید شامل پشتیبانی از __len__() و __getitem__() باشند؛ این امر امکان پیمایش روی NodeList در دستورات for و پشتیبانی مناسب از تابع توکار len() را فراهم می‌کند.

اگر یک پیاده‌سازی DOM از تغییر سند پشتیبانی کند، پیاده‌سازی NodeList نیز باید از متدهای __setitem__() و __delitem__() پشتیبانی کند.

اشیای DocumentType

اطلاعاتی درباره نمادگذاری‌ها و موجودیت‌های اعلام‌شده توسط یک سند (شامل زیرمجموعه‌ی خارجی اگر پارسر از آن استفاده کند و بتواند اطلاعات را فراهم کند) از یک شیء DocumentType در دسترس است. DocumentType یک سند از ویژگی doctype شیء Document در دسترس است؛ اگر اعلان DOCTYPE برای سند وجود نداشته باشد، ویژگی doctype سند به جای یک نمونه از این رابط، برابر None تنظیم خواهد شد.

DocumentType یک نوع تخصصی از Node است و ویژگی‌های زیر را اضافه می‌کند:

DocumentType.publicId

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

DocumentType.systemId

شناسه‌ی سیستمی، یک URI، برای زیرمجموعه‌ی خارجی تعریف نوع سند، یا None اگر اعلان DOCTYPE آن را مشخص نکند.

DocumentType.internalSubset

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

DocumentType.name

نام عنصر ریشه، همان‌گونه که در اعلامیه DOCTYPE آمده است، در صورت وجود.

DocumentType.entities

این یک NamedNodeMap از نودهای Entity است که تعاریف موجودیت‌های خارجی را می‌دهند. برای نام‌های موجودیت که بیش از یک بار تعریف شده‌اند، فقط اولین تعریف ارائه می‌شود (سایر موارد طبق توصیه XML نادیده گرفته می‌شوند). این ممکن است None باشد اگر اطلاعات توسط پارسر ارائه نشده باشد، یا اگر هیچ موجودیتی تعریف نشده باشد.

DocumentType.notations

این یک NamedNodeMap از نودهای Notation است که تعاریف نمادگذاری‌ها را می‌دهند. برای نام‌های نمادگذاری که بیش از یک بار تعریف شده‌اند، فقط اولین تعریف ارائه می‌شود (سایر موارد طبق توصیه XML نادیده گرفته می‌شوند). این ممکن است None باشد اگر اطلاعات توسط پارسر ارائه نشده باشد، یا اگر هیچ نمادگذاریی تعریف نشده باشد.

اشیای سند

یک Document نشان‌دهنده‌ی یک سند XML کامل است، شامل عناصر تشکیل‌دهنده‌ی آن، ویژگی‌ها، دستورالعمل‌های پردازشی، کامنت‌ها و غیره. به خاطر داشته باشید که این کلاس خصوصیات را از Node به ارث می‌برد.

Document.documentElement

یگانه عنصر ریشه‌ی سند.

Document.doctype

نود DocumentType سند، یا None. این یک ویژگی فقط‌خواندنی است.

Document.implementation

شیء DOMImplementation که این سند را ایجاد کرده است. این یک ویژگی فقط‌خواندنی است.

Document.strictErrorChecking

آیا بررسی خطا اعمال می‌شود.

Document.documentURI

موقعیت سند، یا None در صورت ناشناخته بودن.

Document.createDocumentFragment()

ایجاد و برگرداندن یک نود DocumentFragment خالی.

Document.createCDATASection(data)

ایجاد و برگرداندن یک نود CDATASection حاوی data.

Document.importNode(importedNode, deep)

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

Document.createElement(tagName)

ایجاد و برگرداندن یک نود المان جدید. المان هنگام ایجاد در سند درج نمی‌شود. شما باید به صراحت آن را با یکی از متدهای دیگر مانند insertBefore() یا appendChild() درج کنید.

Document.createElementNS(namespaceURI, tagName)

یک المان جدید با فضای نام بسازید و برگردانید. tagName می‌تواند پیشوند داشته باشد. المان هنگام ایجاد در سند درج نمی‌شود. شما باید به صراحت آن را با یکی از متدهای دیگر مانند insertBefore() یا appendChild() درج کنید.

Document.createTextNode(data)

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

Document.createComment(data)

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

Document.createProcessingInstruction(target, data)

یک گره دستور پردازش حاوی target و data که به‌عنوان پارامتر ارسال شده‌اند ایجاد می‌کند و بازمی‌گرداند. مانند سایر متدهای ایجاد، این متد گره را در درخت درج نمی‌کند.

Document.createAttribute(name)

یک گره ویژگی بسازید و برگردانید. این متد گره ویژگی را با هیچ المان خاصی مرتبط نمی‌کند. شما باید از setAttributeNode() روی شیء Element مناسب استفاده کنید تا از نمونه ویژگی تازه ساخته‌شده بهره‌مند شوید.

Document.createAttributeNS(namespaceURI, qualifiedName)

یک گره ویژگی با فضای نام بسازید و برگردانید. tagName می‌تواند پیشوند داشته باشد. این متد گره ویژگی را با هیچ المان خاصی مرتبط نمی‌کند. شما باید از setAttributeNode() روی شیء Element مناسب استفاده کنید تا از نمونه ویژگی تازه ساخته‌شده بهره‌مند شوید.

Document.getElementById(id)

المانی که دارای شناسه داده شده است را برگردانید، یا None. تنها ویژگی‌هایی که در DTD یا توسط Element.setIdAttribute() به عنوان نوع ID اعلام شده‌اند جستجو می‌شوند.

Document.getElementsByTagName(tagName)

جستجو برای همه‌ی نوادگان (فرزندان مستقیم، فرزندان فرزندان و غیره) با نام نوع عنصر معین.

Document.getElementsByTagNameNS(namespaceURI, localName)

جست‌وجوی همه‌ی نوادگان (فرزندان مستقیم، فرزندان فرزندان و غیره) با یک URI فضای نام و نام محلی (localname) معین. نام محلی (localname) بخشی از فضای نام است که پس از پیشوند قرار دارد.

Document.renameNode(n, namespaceURI, name)

نام گره المان یا ویژگی n را تغییر دهید و آن را برگردانید. namespaceURI URI فضای نام جدید است، یا EMPTY_NAMESPACE اگر گره متعلق به فضای نام نباشد. name نام کامل جدید است.

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

اشیاء عنصر

Element زیرکلاسی از Node است، بنابراین تمام ویژگی‌های آن کلاس را به ارث می‌برد.

Element.tagName

نام نوع عنصر. در سندی که از فضای نام استفاده می‌کند، ممکن است حاوی دونقطه باشد. مقدار آن یک رشته است.

Element.setIdAttribute(name)

اعلام کنید که ویژگی name از نوع ID است، تا المان توسط Document.getElementById() یافت شود. NotFoundErr را اگر المان چنین ویژگی‌ای نداشته باشد پرتاب کنید.

Element.setIdAttributeNS(namespaceURI, localName)

مشابه setIdAttribute()، اما برای ویژگی مشخص شده با URI فضای نام و نام محلی.

Element.setIdAttributeNode(idAttr)

مشابه setIdAttribute()، اما برای یک گره ویژگی که قبلاً بازیابی شده است.

Element.getElementsByTagName(tagName)

مشابه متد معادل در کلاس Document.

Element.getElementsByTagNameNS(namespaceURI, localName)

مشابه متد معادل در کلاس Document.

Element.hasAttribute(name)

اگر عنصر دارای ویژگی‌ای به نام name باشد، True را بازمی‌گرداند.

Element.hasAttributeNS(namespaceURI, localName)

اگر عنصر دارای صفتی باشد که با namespaceURI و localName نام‌گذاری شده است، True برمی‌گرداند.

Element.getAttribute(name)

مقدار ویژگی با نام name را به‌صورت یک رشته برمی‌گرداند. اگر چنین ویژگی‌ای وجود نداشته باشد، یک رشته خالی برگردانده می‌شود، گویی که ویژگی مقداری ندارد.

Element.getAttributeNode(attrname)

گره Attr برای صفتی با نام attrname را برمی‌گرداند.

Element.getAttributeNS(namespaceURI, localName)

مقدار ویژگی با نام تعیین‌شده توسط namespaceURI و localName را به‌صورت یک رشته برمی‌گرداند. اگر چنین ویژگی‌ای وجود نداشته باشد، یک رشته خالی برگردانده می‌شود، گویی که ویژگی مقداری ندارد.

Element.getAttributeNodeNS(namespaceURI, localName)

مقدار یک ویژگی را با توجه به namespaceURI و localName به‌صورت یک گره برمی‌گرداند.

Element.removeAttribute(name)

یک ویژگی را با نام حذف کنید.

Element.removeAttributeNode(oldAttr)

در صورت وجود، oldAttr را از فهرست ویژگی‌ها حذف و برمی‌گرداند. اگر oldAttr وجود نداشته باشد، NotFoundErr پرتاب می‌شود.

Element.removeAttributeNS(namespaceURI, localName)

یک ویژگی را با نام حذف کنید. توجه کنید که از localName استفاده می‌کند، نه qname.

Element.setAttribute(name, value)

تنظیم مقدار یک ویژگی از یک رشته.

Element.setAttributeNode(newAttr)

یک نود ویژگی جدید به المان اضافه کنید، در صورت لزوم یک ویژگی موجود را جایگزین کنید اگر ویژگی name مطابقت داشته باشد. اگر جایگزینی رخ دهد، نود ویژگی قدیمی بازگردانده می‌شود. اگر newAttr از قبل در حال استفاده باشد، InuseAttributeErr صادر می‌شود.

Element.setAttributeNodeNS(newAttr)

یک نود ویژگی جدید به المان اضافه کنید، در صورت لزوم یک ویژگی موجود را جایگزین کنید اگر ویژگی‌های namespaceURI و localName مطابقت داشته باشند. اگر جایگزینی رخ دهد، نود ویژگی قدیمی بازگردانده می‌شود. اگر newAttr از قبل در حال استفاده باشد، InuseAttributeErr صادر می‌شود.

Element.setAttributeNS(namespaceURI, qname, value)

مقدار یک ویژگی را از یک رشته، با داشتن namespaceURI و qname تنظیم کنید. توجه داشته باشید که qname کل نام ویژگی است. این مورد با مورد بالا متفاوت است.

اشیای Attr

Attr از Node ارث می‌برد، بنابراین تمام ویژگی‌های آن را به ارث می‌برد.

نودهای ویژگی بخشی از درخت سند نیستند. آن‌ها در نگاشت attributes یک المان قرار دارند، نه در فرزندان آن، و parentNode، previousSibling و nextSibling آن‌ها همیشه None هستند.

Attr.name

نام ویژگی. در سندی که از فضای نام استفاده می‌کند، ممکن است شامل دونقطه باشد.

Attr.localName

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

Attr.prefix

بخشی از نام که پیش از دونقطه قرار دارد، در صورت وجود دونقطه، و در غیر این صورت رشته خالی.

Attr.isId

آیا این ویژگی از نوع ID است، یا به دلیل اینکه در DTD به این صورت اعلام شده است یا به دلیل استفاده از Element.setIdAttribute(). این یک ویژگی فقط‌خواندنی است.

Attr.ownerElement

نود Element که این ویژگی متعلق به آن است، یا None اگر استفاده نشده باشد. این یک ویژگی فقط‌خواندنی است.

Attr.specified

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

Attr.value

مقدار متنی ویژگی. این مترادف ویژگی nodeValue است.

اشیای NamedNodeMap

NamedNodeMap از Node ارث نمی‌برد.

NamedNodeMap.length

طول فهرست ویژگی‌ها.

NamedNodeMap.item(index)

یک ویژگی با یک اندیس خاص را برگردانید. ترتیبی که ویژگی‌ها در آن دریافت می‌شوند دلخواه است اما برای عمر یک DOM ثابت خواهد بود. هر آیتم یک نود ویژگی است. مقدار آن را با ویژگی value بدست آورید.

NamedNodeMap.getNamedItem(name)

نودی را که name داده شده را دارد برگردانید، یا None اگر چنین نودی وجود نداشته باشد.

NamedNodeMap.getNamedItemNS(namespaceURI, localName)

نودِ با فضای نام و نام محلی داده‌شده را برگردانید، یا None اگر چنین نودی وجود نداشته باشد.

NamedNodeMap.setNamedItem(node)

node را به نگاشت اضافه کنید، با استفاده از name آن به عنوان کلید. نودی که جایگزین می‌شود را برگردانید، یا None اگر نودی جایگزین نشده باشد.

NamedNodeMap.setNamedItemNS(node)

node را به نگاشت اضافه کنید، با استفاده از فضای نام و نام محلی آن به عنوان کلید. نودی که جایگزین می‌شود را برگردانید، یا None اگر نودی جایگزین نشده باشد.

NamedNodeMap.removeNamedItem(name)

نود با name داده‌شده را حذف و برگردانید. اگر چنین نودی وجود نداشته باشد، NotFoundErr را پرتاب کنید.

NamedNodeMap.removeNamedItemNS(namespaceURI, localName)

نود با فضای نام و نام محلی داده‌شده را حذف و برگردانید. اگر چنین نودی وجود نداشته باشد، NotFoundErr را پرتاب کنید.

شما همچنین می‌توانید از خانواده‌ی متدهای استاندارد getAttribute*() روی شیء‌های Element استفاده کنید.

شیء‌های DocumentFragment

DocumentFragment یک ظرف سبک‌وزن از نودها است. این یک زیرکلاس از Node است. وقتی در درخت سند وارد می‌شود، فرزندان آن به جای خود وارد می‌شوند، و خالی می‌شود.

شیء‌های CharacterData

CharacterData داده‌های شبیه متن در سند XML را نشان می‌دهد. این یک زیرکلاس از Node است، و کلاس پایه‌ی Text، CDATASection و Comment است. چنین نودها نمی‌توانند نودهای فرزند داشته باشند.

CharacterData.data

محتوا‌ی گره به صورت یک رشته.

CharacterData.length

تعداد نویسه‌ها در data. این یک ویژگی فقط‌خواندنی است.

CharacterData.substringData(offset, count)

بازگرداندن زیررشته‌ی data شامل count نویسه از offset آغاز شده.

CharacterData.appendData(arg)

افزودن رشته arg به data.

CharacterData.insertData(offset, arg)

درج رشته arg در data در offset.

CharacterData.deleteData(offset, count)

حذف count نویسه از data از offset آغاز شده.

CharacterData.replaceData(offset, count, arg)

جایگزینی count نویسه از data از offset آغاز شده با رشته arg.

اشیای کامنت

Comment یک کامنت در سند XML را نشان می‌دهد. این یک زیرکلاس از CharacterData است.

Comment.data

محتوای کامنت به‌صورت یک رشته. این ویژگی تمام نویسه‌های بین <!-- آغازین و --> پایانی را در بر دارد، اما خود آن‌ها را شامل نمی‌شود.

اشیای Text و CDATASection

رابط Text متن در سند XML را نشان می‌دهد. اگر پارسر و پیاده‌سازی DOM از گسترش XMLِ DOM پشتیبانی کنند، بخش‌های متنی که در بخش‌های نشانه‌گذاری‌شده CDATA محصور شده‌اند در شیء‌های CDATASection ذخیره می‌شوند. این دو رابط یکسان هستند، اما مقادیر متفاوتی برای ویژگی nodeType فراهم می‌کنند.

Text رابط CharacterData را گسترش می‌دهد، و CDATASection Text را گسترش می‌دهد.

Text.data

محتوای گره متنی به‌عنوان یک رشته.

Text.wholeText

متنِ تمام نودهای Text به‌صورت منطقی مجاور به این نود، در ترتیبِ سند الحاق شده‌اند. این یک ویژگی فقط‌خواندنی است.

Text.replaceWholeText(content)

متنِ تمام نودهای Text به‌صورت منطقی مجاور به این نود را با content جایگزین کنید، و نودهای دیگر را حذف کنید. این نود را برگردانید، یا None اگر content خالی باشد.

Text.splitText(offset)

این نود را در offset به دو نود تقسیم کنید، با نگه‌داشتن بخش اول در این نود و برگرداندن یک نود هم‌سایه جدید با باقی‌مانده.

توجه

استفاده از یک گره CDATASection نشان نمی‌دهد که آن گره یک بخش نمادگذاری‌شده‌ی CDATA کامل را نمایندگی می‌کند، بلکه تنها نشان می‌دهد که محتوای گره بخشی از یک بخش CDATA بوده است. یک بخش CDATA ممکن است توسط بیش از یک گره در درخت سند نمایندگی شود. هیچ راهی برای تعیین این‌که آیا دو گره CDATASection مجاور، بخش‌های نمادگذاری‌شده‌ی CDATA متفاوتی را نمایندگی می‌کنند یا خیر، وجود ندارد.

اشیای ProcessingInstruction

نشان‌دهنده‌ی یک دستور پردازشی (processing instruction) در سند XML است؛ این مورد از رابط Node ارث‌بری می‌کند و نمی‌تواند دارای گره‌های فرزند باشد.

ProcessingInstruction.target

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

ProcessingInstruction.data

محتوای دستورالعمل پردازش پس از نخستین نویسه فضای سفید.

اشیای Entity

Entity یک موجودیت تجزیه‌شده یا تجزیه‌نشده را که در DTD اعلام شده است، نشان می‌دهد. این یک زیرکلاس از Node است. نودهای موجودیت در DocumentType.entities قرار دارند و نمی‌توان آن‌ها را در درخت سند درج کرد. نام موجودیت، nodeName آن است.

Entity.publicId

شناسه‌ی عمومی موجودیت، یا None اگر مشخص نشده باشد. این یک ویژگی فقط‌خواندنی است.

Entity.systemId

شناسه‌ی سیستمی موجودیت، یا None اگر مشخص نشده باشد. این یک ویژگی فقط‌خواندنی است.

Entity.notationName

نام نمادگذاری برای یک موجودیت تجزیه‌نشده، یا None برای یک موجودیت تجزیه‌شده. این یک ویژگی فقط‌خواندنی است.

اشیای Notation

Notation یک نمادگذاری را که در DTD اعلام شده است، نشان می‌دهد. این یک زیرکلاس از Node است و نمی‌تواند نودهای فرزند داشته باشد. نودهای نمادگذاری در DocumentType.notations قرار دارند و نمی‌توان آن‌ها را در درخت سند درج کرد. نام نمادگذاری، nodeName آن است.

Notation.publicId

شناسه‌ی عمومی نمادگذاری، یا None اگر مشخص نشده باشد. این یک ویژگی فقط‌خواندنی است.

Notation.systemId

شناسه‌ی سیستمی نمادگذاری، یا None اگر مشخص نشده باشد. این یک ویژگی فقط‌خواندنی است.

استثناها

توصیه‌نامه‌ی DOM Level 2 یک استثنای واحد، DOMException، و تعدادی ثابت تعریف می‌کند که به برنامه‌ها امکان می‌دهند تعیین کنند چه نوع خطایی رخ داده است. نمونه‌های DOMException دارای ویژگی code هستند که مقدار مناسب برای آن استثنای خاص را فراهم می‌کند.

رابط DOM پایتون ثابت‌ها را فراهم می‌کند، اما مجموعه استثناها را نیز گسترش می‌دهد تا برای هر یک از کدهای استثنای تعریف‌شده توسط DOM، یک استثنای مشخص وجود داشته باشد. پیاده‌سازی‌ها باید استثنای مشخص مناسب را پرتاب کنند، که هر کدام مقدار مناسبی برای ویژگی code دارند.

exception xml.dom.DOMException

کلاس استثنای پایه که برای تمام استثناهای خاص DOM استفاده می‌شود. این کلاس استثنا نمی‌تواند مستقیماً نمونه‌سازی شود.

exception xml.dom.DomstringSizeErr

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

exception xml.dom.HierarchyRequestErr

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

exception xml.dom.IndexSizeErr

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

exception xml.dom.InuseAttributeErr

هنگامی که تلاشی برای درج یک گره Attr که از قبل در جای دیگری از سند وجود دارد انجام شود، پرتاب می‌شود.

exception xml.dom.InvalidAccessErr

در صورتی که پارامتر یا عملیاتی توسط شیء زیرین پشتیبانی نشود، پرتاب می‌شود.

exception xml.dom.InvalidCharacterErr

این استثنا زمانی پرتاب می‌شود که یک پارامتر رشته‌ای شامل نویسه‌ای باشد که در زمینه‌ای که در آن به کار می‌رود، از نظر توصیه‌نامه‌ی XML 1.0 مجاز نیست. برای مثال، تلاش برای ایجاد یک گره Element با یک فاصله در نام نوع عنصر، باعث پرتاب این خطا می‌شود.

exception xml.dom.InvalidModificationErr

هنگامی که تلاشی برای تغییر نوع یک گره انجام شود، پرتاب می‌شود.

exception xml.dom.InvalidStateErr

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

exception xml.dom.NamespaceErr

اگر تلاشی برای تغییر هر شیء به شکلی که با توجه به توصیه‌نامه‌ی Namespaces in XML مجاز نیست صورت گیرد، این استثنا پرتاب می‌شود.

exception xml.dom.NotFoundErr

استثنا برای زمانی که گره‌ای در زمینه ارجاع‌شده وجود ندارد. برای مثال، NamedNodeMap.removeNamedItem() این استثنا را در صورتی پرتاب می‌کند که گره داده‌شده در نگاشت وجود نداشته باشد.

exception xml.dom.NotSupportedErr

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

exception xml.dom.NoDataAllowedErr

این استثنا در صورتی پرتاب می‌شود که داده برای گره‌ای تعیین شود که از داده پشتیبانی نمی‌کند.

exception xml.dom.NoModificationAllowedErr

در صورت تلاش برای تغییر یک شیء در شرایطی که تغییر مجاز نیست (مانند گره‌های فقط‌خواندنی) پرتاب می‌شود.

exception xml.dom.SyntaxErr

هنگامی که یک رشته‌ی نامعتبر یا غیرمجاز مشخص شود، پرتاب می‌شود.

exception xml.dom.ValidationErr

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

exception xml.dom.WrongDocumentErr

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

کدهای استثنای تعریف‌شده در توصیه‌نامه DOM، مطابق این جدول به استثناهای شرح‌داده‌شده در بالا نگاشت می‌شوند:

ثابت

استثنا

xml.dom.DOMSTRING_SIZE_ERR

DomstringSizeErr

xml.dom.HIERARCHY_REQUEST_ERR

HierarchyRequestErr

xml.dom.INDEX_SIZE_ERR

IndexSizeErr

xml.dom.INUSE_ATTRIBUTE_ERR

InuseAttributeErr

xml.dom.INVALID_ACCESS_ERR

InvalidAccessErr

xml.dom.INVALID_CHARACTER_ERR

InvalidCharacterErr

xml.dom.INVALID_MODIFICATION_ERR

InvalidModificationErr

xml.dom.INVALID_STATE_ERR

InvalidStateErr

xml.dom.NAMESPACE_ERR

NamespaceErr

xml.dom.NOT_FOUND_ERR

NotFoundErr

xml.dom.NOT_SUPPORTED_ERR

NotSupportedErr

xml.dom.NO_DATA_ALLOWED_ERR

NoDataAllowedErr

xml.dom.NO_MODIFICATION_ALLOWED_ERR

NoModificationAllowedErr

xml.dom.SYNTAX_ERR

SyntaxErr

xml.dom.VALIDATION_ERR

ValidationErr

xml.dom.WRONG_DOCUMENT_ERR

WrongDocumentErr

انطباق

این بخش الزامات انطباق و روابط میان API DOM پایتون، توصیه‌نامه‌های DOM W3C و نگاشت OMG IDL برای پایتون را شرح می‌دهد.

نگاشت نوع

انواع IDL استفاده‌شده در مشخصات DOM، مطابق جدول زیر به انواع پایتون نگاشت می‌شوند.

نوع IDL

نوع پایتون

boolean

bool یا int

int

int

long int

int

unsigned int

int

DOMString

str یا bytes

null

None

متدهای دسترسی

نگاشت از 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 از پیاده‌سازی‌ها نمی‌خواهد که چنین نیازمندی‌هایی را اعمال کنند.