Бібліотека API-інтерфейсу для Python, що відповідає специфікації CMIS: Частина 1. Введення в cmislib

  1. Серія контенту:
  2. Цей контент є частиною серії: Бібліотека API-інтерфейсу для Python, що відповідає специфікації CMIS
  3. Представляємо cmislib: API-інтерфейс для мови Python, відповідний специфікації CMIS
  4. Часто використовувані скорочення
  5. Інші статті даної серії
  6. Спонукальні мотиви для створення описуваного API-інтерфейсу
  7. Що робить API-інтерфейс cmislib
  8. Лістинг 1. Перелік витягнутих з репозитария документів
  9. Лістинг 2. Витяг документа
  10. Підхід до розробки та тестування
  11. кілька прикладів
  12. Отримання об'єкта Repository
  13. Робота з об'єктами типу Folder (Папка) і Document (Документ)
  14. витяг об'єктів
  15. Висновок
  16. Ресурси для скачування

Бібліотека API-інтерфейсу для Python, що відповідає специфікації CMIS

API-інтерфейс на стороні клієнта, відповідний специфікації CMIS (Content Management Interoperability Services)

Серія контенту:

Цей контент є частиною # з серії # статей: Бібліотека API-інтерфейсу для Python, що відповідає специфікації CMIS

https://www.ibm.com/developerworks/ru/views/global/libraryview.jsp?series_title_by=Библиотека+api-интерфейса+для+python,+соответствующая+спецификации+cmis

Слідкуйте за виходом нових статей цієї серії.

Цей контент є частиною серії: Бібліотека API-інтерфейсу для Python, що відповідає специфікації CMIS

Слідкуйте за виходом нових статей цієї серії.

Представляємо cmislib: API-інтерфейс для мови Python, відповідний специфікації CMIS

Схоже, для специфікації Content Management Interoperability Services (CMIS) настає напружений час. Організація OASIS займається підготовкою матеріалів для випуску 1.0 даної специфікації, постачальники репозитаріїв наполегливо працюють над завершенням своїх реалізацій на стороні сервера, а розробники із товариства з управління контентом випускають стандартизовані клієнтські компоненти і API-інтерфейси, покликані полегшити дослідження і роботу з репозитаріїв насиченого контенту за рахунок застосування стандартних способів.

Часто використовувані скорочення
  • ACL: Access control list (Список управління доступом)
  • API: Application program interface (Інтерфейс прикладного програмування, API-інтерфейс)
  • HTTP: Hypertext transfer protocol (Протокол передачі гіпертекстових файлів)
  • OASIS: Organization for the Advancement of Structured Information Standards (Організація з просування стандартів для структурованої інформації)
  • REST: Representational State Transfer (Архітектурний підхід, заснований на передачі стану подання)
  • SDK: Software development kit (Інструментарій для розробки програмного забезпечення)
  • SQL: Structured Query Language (Мова структурованих запитів)
  • URL: Uniform Resource Locator (Уніфікований покажчик інформаційного ресурсу, URL-адресу)
  • WSDL: Web Services Description Language (Мова опису Web-сервісів)
  • XML: Extensible Markup Language (Розширювана мова розмітки)

Якщо вам коли-небудь доводилося створювати контентно-орієнтовані додатки, то ви знаєте, що зазвичай перша складність полягає в з'ясуванні того, як слід «говорити» з забезпечує репозитарием контенту. Спочатку ваша команда проходить прискорений курс навчання по SDK-інструментарію цього сховища. Потім ви проектуєте вищезгадане додаток, в тому числі інтеграцію між рівнем уявлення (Presentation tier) і рівнем тематичних сервісів (Content services tier). І, нарешті, ви виконуєте свій план, після чого відзначаєте досягнутий успіх великим банкетом з напоями та закусками. Однак, крім збільшення окружності вашої талії, негативний момент такого підходу полягає в тому, що цей процес повторюється для кожної нової комбінації фронтального і серверного компонентів, оскільки кожен репозитарій має свій унікальний API-інтерфейс. І якщо, як це часто буває, вашому додатку потрібно розмовляти з кількома репозитарій, то ви повинні будете вивчити кілька інтерфейсів і написати відповідний програмний код.

На щастя, подібна проблема вже вирішувалася раніше. Аналогічна ситуація мала місце до стандартизації SQL. Реляційні бази даних, створені IBM® і іншими компаніями, почали з'являтися ще на початку 1970-х років, однак перше офіційні роботи по стандартизації мови запитів SQL почалися тільки в 1986 р Коли це, нарешті, сталося, особливо після випуску великої ревізії в 1992 м, розробники отримали можливість для створення фронтальних додатків - з достатнім ступенем впевненості в тому, що ці додатки зможуть працювати з декількома реляційними серверними компонентами. Специфікація CMIS потенційно здатна зробити для контентно-орієнтованих додатків те ж саме, що мова SQL зробив для додатків реляційних баз даних. CMIS надає стандартний спосіб для взаємодії з серверним компонентом, що не залежить від реалізації забезпечує репозитария або від вибору мови програмування для фронтального компонента. Тільки на цей раз замість рядків і стовпців ми говоримо про неструктурованому і полуструктурированного контенті - зазвичай це файли того чи іншого різновиду - який, як правило, розміщується в ієрархічній структурі папок.

Бібліотека API-інтерфейсу для Python, що відповідає специфікації CMIS   API-інтерфейс на стороні клієнта, відповідний специфікації CMIS (Content Management Interoperability Services)   Серія контенту:   Цей контент є частиною # з серії # статей: Бібліотека API-інтерфейсу для Python, що відповідає специфікації CMIS   https://www

Ця стаття описує бібліотеку боку клієнта під назвою cmislib, яка призначена для роботи з CMIS-репозитарії з середовища Python. Ця бібліотека, яка в даний час супроводжується в рамках проекту Apache Chemistry, покликана спростити розробникам на мові Python написання контентно-орієнтованих додатків, здатних працювати з будь-яким серверним компонентом, відповідним специфікації CMIS. Для багатьох розробників цей API-інтерфейс виявиться зручним способом практичного знайомства з можливостями CMIS.

Інші статті даної серії

Тепер я розповім, чому цей API був створений, що він робить для нас і як він був розроблений (натякаю - на випадок, якщо ви захочете переписати його на своєму улюбленому мові), після чого ми розглянемо кілька коротких прикладів роботи з бібліотекою cmislib. У наступній статті серії послідовно описується застосування цієї бібліотеки для вирішення реальних завдань.

Спонукальні мотиви для створення описуваного API-інтерфейсу

В силу багатьох причин створення клієнтського API-інтерфейсу для CMIS на мові Python уявлялося розумною ідеєю. Деякі з цих причин відносяться до категорії «стратегічних» і «ідеалістичних». Інші причини є більш «тактичними» і «егоїстичними». Почнемо з причин першої категорії.

Постачальники продуктів, відповідних CMIS, зобов'язані пропонувати як зв'язування на основі Web-сервісів, так і RESTful-зв'язування на основі протоколу AtomPub (Atom Publishing Protocol). Кожне з цих зв'язувань має певні переваги перед іншим, проте одна з відмінностей між ними полягає в тому, як здійснюється виявлення і виклик CMIS-сервісів на різних серверах. Зв'язування через Web-сервіси передбачає наявність WSDL-файлу, який може використовуватися для автоматичної генерації клієнтського коду. Якщо ви бажаєте використовувати зв'язування на основі Web-сервісів, то з невеликими додатковими зусиллями (крім створення WSDL-файлу для свого CMIS-сервера) ви зможете згенерувати свій API-інтерфейс для боку клієнта.

З іншого боку, RESTful-зв'язування на основі протоколу AtomPub не має стандартного способу для опису своїх сервісів. Оскільки це «RESTful-зв'язування», то доступ до всіх його сервісів здійснюється за допомогою URL-адреси, однак специфікація CMIS залишає кожному постачальнику певні URL-адреси. Таким чином, якщо ви хочете написати код, який буде працювати з усіма «CMIS-сумісними» постачальниками з використанням RESTful-зв'язування на основі AtomPub, то на стороні клієнта вам доведеться виконати кілька більший обсяг роботи. Замість повторення цієї роботи в усіх проектах доцільно зробити це в рамках проекту з відкритим вихідним кодом, результати якого будуть доступні всім бажаючим.

Наступна причина полягає в прийнятті розглянутої нами специфікації розробниками додатків і постачальниками репозитаріїв контенту. Розробники можуть переглядати відповідні Web-семінари, повідомлення в блогах, трафік Twitter і т.п., проте до тих пір, поки вони не спробують це своїми руками і не усвідомлюють цінність на власному досвіді, CMIS залишається для них не більше ніж черговим модним слівцем . Якби програмне забезпечення, як і раніше поставлялося в коробках, то можна було б уявити яскраво розфарбовані гасла типу: «Тепер - на основі CMIS!». Мова Python - чистий, продуктивний, простий в установці - виглядає як прекрасний вибір для тих розробників, які дійсно хочуть розібратися в тому, що специфікація CMIS здатна реально зробити для них і для їх додатків. API-інтерфейс cmislib захищає розробників від деталей реалізації і забезпечує їм інтуїтивно зрозумілий, об'єктно-орієнтована і сумісний спосіб роботи. Хотілося б сподіватися, що розробники візьмуть його на озброєння, як і багато іншого, що потрапляє в поле їх зору, і почнуть використовувати CMIS в якості стандартного способу для взаємодії замовних контентно-орієнтованих додатків з репозитаріїв насиченого контенту - незалежно від мови, на якому побудований відповідний клієнт - на мові Python або на будь-якому іншому мовою.

Якщо специфікація CMIS буде прийнята хоча б одним або двома постачальниками, то кінцева ціла мета вже буде досягнута. Таким чином, всім тим, хто виграє від використання цього стандарту, безперечно має сенс зробити все можливе, щоб стимулювати прийняття з боку постачальника. До складу дистрибутива cmislib включені т.зв. модульні тести (unit test), призначені для використання в якості найкращої типової методики розробки. Цей набір тестів істотно допомагає гарантувати збереження всіх функціональних можливостей в процесі розробки API, а також є також зручним способом для відтворюється валідації такої характеристики, як «здатність до взаємодії». У будь-якому випадку, ці модульні тести функціонують як набір тестів для постачальників - і це дуже добре! Кожен з таких постачальників, як IBM, Alfresco ™, OpenText і Nuxeo, використовував cmislib для виявлення проблем в своїх реалізаціях. Вони не обмежувалися тільки бібліотекою cmislib - для валідації своєї роботи ці постачальники використовували всі різновиди побудованих спільнотою CMIS-інструментів і CMIS-клієнтів, що є досить позитивним явищем.

«Все за одного і один за всіх» - це сильна мотивація, однак вона рідко призводить до появи хоча б одного рядка написаного коду. Образно кажучи, кожен проект з відкритим вихідним кодом починається з того, що у розробника виникає непереборне бажання почухати якесь «зудить місце». У розглядаємо випадку свербіж почався з інтранет-проекту, який компанія Optaros ™ виконала для свого клієнта. Цей проект повинен був забезпечити інтеграцію між Django® (інфраструктура на базі Python для розробки Web-додатків) і Alfresco (платформа з відкритим вихідним кодом для управління контентом). На момент реалізації цього проекту специфікація CMIS ще не вийшла за рамки ідеї в організації OASIS, тому зазначена інтеграція використовує на стороні сервера Web-скрипти Alfresco (інфраструктура для розгортання власного RESTful API-інтерфейсу до платформи Alfresco) для передачі XML по HTTP між заснованим на Django рівнем уявлення і Alfresco-репозитарием. Все це працює прекрасно, але є «Alfresco-специфічним». Здавалося розумним провести рефакторинг цієї інтеграції Django з метою використання CMIS. Проте, щоб уникнути прив'язки до Django, ми вирішили спочатку розгорнути бібліотеку cmislib як API-інтерфейсу нижнього рівня для Python. Перевага цього підходу полягає в тому, що завдяки використанню бібліотеки cmislib він істотно полегшує інтеграцію з CMIS-сумісними репозитарій не тільки Django, а й інших Python-проектів, таких як Zope® і Plone®, а так же замовних Python-додатків.

Остання «егоїстична» причина - це продуктивність праці розробника. Більшість підприємств не можуть дозволити собі такої розкоші, як робота з єдиним репозитарием. Крім того, у багатьох випадках ІТ-рішення не здатне передбачити, з яким саме репозитарием йому доведеться мати справу, або, щонайменше, потребує можливості для перемикання на відповідний репозитарій при настанні потрібного моменту. Цілком очевидно, що стандарт CMIS допомагає подолати ці проблеми, однак щоб робота стала дійсно продуктивної, необхідні відповідні бібліотеки на стороні клієнта. В даний час здійснюються і інші проекти зі створення клієнтських бібліотек для CMIS, заснованих на Java ™ та PHP. Однак мова Python також дуже поширений на рівні уявлення, тому настільки важлива клієнтська бібліотека для CMIS, заснована на Python.

Що робить API-інтерфейс cmislib

Призначення інтерфейсу cmislib полягає в тому, щоб абстрагувати деталі забезпечує реалізації CMIS. Для того щоб побудувати рішення «поверх» CMIS-сумісних репозитаріїв, розробникам немає необхідності вивчати, як працює CMIS. Навпаки, бібліотека cmislib надає просту в розумінні модель об'єкта, яка знайома будь-якому фахівцю, який працює з репозитарием контенту або прочитав специфікацію CMIS. Замість «колекцій», «елементів» і «потоків» розробники працюють з такими природними концепціями управління контентом, як репозитарії, папки, документи і ACL-списки.

Як зазначалося вище, при комунікаціях з CMIS-сумісними серверами cmislib використовує зв'язування RESTful AtomPub. Одна з важливих завдань при розробці полягала в тому, щоб гарантувати відсутність у бібліотеки cmislib будь-яких знань про специфіку постачальників серверних репозитаріїв, до яких вона звертається - ця бібліотека відноситься до CMIS-постачальнику як до «чорного ящика». Коли ви використовуєте інтерфейс cmislib для підключення до CMIS-постачальнику, ви надаєте йому точку входу CMIS-постачальника або URL-адресу сервісу і якусь облікову інформацію. Бібліотека cmislib з'ясовує порядок подальшої взаємодії з відповідним сервером за допомогою дослідження його відповідей.

Як приклад припустимо, що ви хочете отримати список документів, які в даний час вилучені з репозитария. Специфікація CMIS повідомляє вам наступне:

  • Колекція витягнутих документів існує.
  • При виклику сервісу getCheckedOutDocsобязателен аргумент repositoryId.
  • Можна передати кількох додаткових аргументів, які, здебільшого, мають відношення до розбиття на сторінки набору результатів.
  • Відповідь від сервісу буде являти собою потік Atom.

Однак специфікація не повідомляє вам точного URL-адреси для отримання вищезазначеної колекції. Це залишено на розсуд постачальника. Бібліотека cmislib з'ясовує, що це за URL-адресу та як перетворити відгук в об'єкти мови Python, з якими ви зможете працювати «Python-образним» способом. В лістингу 1 показано, як це взаємодія виглядає з оболонки Python:

Лістинг 1. Перелік витягнутих з репозитария документів

>>> rs = repo.getCheckedOutDocs () >>> len (rs) 2 >>> for doc in rs: ... doc.title ... u'Response XML (Working Copy) 'u'd1 (Working Copy ) '

Аналогічно, припустимо, що ви хочете отримати документ з репозитария. Згідно зі специфікацією, для вилучення ви повинні відправити методом POST запис Atom в колекцію витягнутих елементів (checkout), після чого репозитарій поверне елемент Atom, що представляє собою приватну робочу копію (PWC - Private Working Copy) об'єкта, який ви витягли. Якщо ви використовуєте cmislib, то вам немає необхідності піклуватися про визначення колекції, про побудову і відправці XML-елемента Atom або про обробку XML-відповіді. Замість цього ви обмежуєтеся застосуванням методу checkout до потрібного об'єкту, а бібліотека cmislib повертає вам об'єкт типу «Документ» у вигляді PWC-копії. Ця взаємодія показано в лістингу 2

Лістинг 2. Витяг документа

>>> doc.title u'testdoc '>>> pwc = doc.checkout () >>> pwc.title u'testdoc (Working Copy)' >>> doc.checkedOut True

Підхід до розробки та тестування

Було дуже важливо, щоб бібліотека cmislib була написана максимально близько до специфікації. Тому перший крок полягав в розстановці заглушок для потрібних класів і методів в середовищі Eclipse, відкритої поруч зі специфікацією CMIS. Я додав перехресні посилання на цю специфікацію в порядкової коментарях, що дозволило мені швидко знаходити потрібне місце в специфікації пізніше, коли я повертався для реалізації потрібного методу.

Я з самого початку налаштував контроль над процесом побудови, документацією і вихідним кодом. Було важливо зробити це на ранній стадії, щоб додаткові розробники могли приєднатися до проекту і швидко приступити до роботи.

Еволюція коду відбувалася ітеративним чином. Кожна ітерація починалося з написання модульних тестів на нові функціональні можливості, тривало написанням реального коду методів і закінчувалася після успішного проходження вищезазначених тестів. Я почав з таких «основ», як запит репозитария про його здібностях та вилучення об'єктів / властивостей об'єктів для валідації загального підходу. Після цього я перейшов до повного написання операцій, перевірок, відносин і ACL-списків.

Спочатку тестування зіткнулося з Певного труднощамі, оскількі НЕ існувало ніякої еталонної реализации (на тій момент зв'язування AtomPub в еталонної реализации Apache Chemistry функціонувало лишь в режімі «только для читання») и оскількі постачальником все ще працював над своими реалізаціямі. Компанія Alfresco, першопроходець в області CMIS, мала найдосконалішу реалізацію, тому я почав сортаменту з неї. Як только більшість модульних тестів з реалізацією Alfresco пройшло успешно, я почав тестуваті публічно Доступні CMIS-продаж других постачальніків. Корпорація IBM проявила люб'язність и безоплатно Надала свою реалізацію. Додавання другий реалізації прояснило багато неясні моменти, але при цьому виявилося великим випробуванням для cmislib і всіх залучених постачальників. І на стороні клієнта, і на стороні сервера ми виявили проблеми, які, цілком можливо, не були б виявлені так швидко без подібного тестування на здатність до взаємодії.

При розробці CMIS-інструментів або таких API-інтерфейсів, як cmislib, вкрай необхідно здійснювати тестування з максимально можливою кількістю різних серверів. Специфікація є вельми нової, а реалізації постачальників все ще знаходяться в стадії «дозрівання», навіть у тих з них, які заявили про повну відповідність проекту специфікації. Найбільш типові виявлені проблеми можна розділити на наступні три категорії:

  • Недостатня повнота реалізації. Специфікація CMIS все ще є досить новою. Звичайною практикою є виявлення відсутніх сервісів (складається враження, що на даний момент найгірше підтримуються ACL-списки, відносини, політики і журнали змін), обов'язкових можливостей, які поки не підтримуються (напр., Ненадані обов'язкові колекції і зв'язку) і жорстко закодовані значення.
  • Розрізняються інтерпретації специфікації. Специфікація CMIS є добре написаний і легкий для читання документ, однак деякі моменти як і раніше залишаються відкритими для інтерпретації. Наприклад, до виходу шостої версії проекту вміст колекції checkedout не було визначено. Можливо, передбачалося, що вона повинна містити PWC-копії витягнутих об'єктів? Або безпосередньо самі об'єкти? Різні постачальники інтерпретували це по-різному і здійснили реалізацію відповідно до своїх інтерпретацій. За минулий з тих пір час ця конкретна проблема була усунена (якщо вам цікаво, то відповідь - PWC-копії), однак можна зрозуміти, наскільки важким могло виявитися написання клієнта, дійсно здатного до взаємодії.
  • Погані допущення. Іноді розширення специфікації боку певного постачальника є цілком очевидним, а іноді це далеко не так. Якщо ви пишете програмний код свого API для одного сервера, а потім розглядаєте його як еталонну реалізації, то ви зробили припущення про те, що інші реалізації будуть діяти аналогічним чином. На даний момент проблема полягає в тому, що поки не існує еталонної CMIS-продажу зі зв'язуванням на основі AtomPub, яка була б функціонально повна і відповідала б специфікації на 100%.

кілька прикладів

У наступній статті даної серії демонструється застосування бібліотеки cmislib в реальних умовах з використанням скрипта на мові Python, який ви зможете використовувати для масової завантаження цифрових активів і метаданих в CMIS-репозитарій. Наступні базові приклади, взяті з документації на cmislib, демонструють виконання типових операцій з API-інтерфейсом з діалогової середовища Python. До числа цих операцій відноситься отримання інформації про репозитарії, робота з папками і документами, відшукання об'єктів за допомогою CMIS-запиту, а також за допомогою шляху, ідентифікатора об'єкта або відносини.

Отримання об'єкта Repository

Об'єкти CmisClient і Repository - це звичайні початкові точки для практично будь-яких дій з CMIS-репозитарием. Отримання примірника здійснюється досить просто - вам достатньо знати URL-адресу сервісу та облікові дані для входу в репозитарій. Виконаю следующие Дії:

  1. З командного рядка запустіть оболонку Python, для чого введіть з клавіатури слово python, а потім натисніть на клавішу Enter.
  2. Імпорт об'єкт CmisClient: >>> from cmislib.model import CmisClient
  3. Вкажіть об'єкту CmisClient на URL-адресу сервісу в репозитарії: >>> client = CmisClient ( 'http://cmis.alfresco.com/s/cmis', 'admin', 'admin')
  4. Кожен репозитарій має свій ідентифікатор (ID) - якщо ви знаєте його, то зможете отримати потрібний репозитарій за його ідентифікатором. В даному випадку ми запитаємо у клієнта репозитарій за замовчуванням. >>> repo = client.defaultRepository >>> repo.id u'83beb297-a6fa-4ac5-844b-98c871c0eea9 '
  5. Тепер ви можете отримати властивості сховища. Наступна конструкція виду for-loop викладає всю інформацію, яку cmislib знає про репозитарії. (Я обрізав лістинг для стислості). >>> repo.name u'Main Repository '>>> info = repo.info >>> for k, v in info.items (): ... print "% s:% s"% (k, v) ... cmisSpecificationTitle: Version 1.0 Committee Draft 04 cmisVersionSupported: 1.0 repositoryDescription: None productVersion: 3.2.0 (r2 2440) rootFolderId: workspace: // SpacesStore / aa1ecedf-9551-49c5-831a-0502bb43f348 repositoryId: 83beb297-a6fa-4ac5- 844b-98c871c0eea9 repositoryName: Main Repository vendorName: Alfresco productName: Alfresco Repository (Community)

Робота з об'єктами типу Folder (Папка) і Document (Документ)

Після того, як ви будете мати у своєму розпорядженні об'єктом Repository (Репозитарії), ви зможете приступити до роботи з такими об'єктами в цьому репозитарії, як Folder (Папка) і Document (Документ).

  1. Створіть нову папку в кореневому каталозі. Якщо ви до цього моменту слідували всім рекомендаціям буквально, то зараз дайте своїй папці якесь унікальне ім'я - якщо ви здійснюєте тестування з публічним репозитарием. >>> root = repo.rootFolder >>> someFolder = root.createFolder ( 'someFolder') >>> someFolder.id u'workspace: // SpacesStore / 91f344ef-84e7-43d8-b379-959c0be7e8fc '
  2. Тепер ви можете створити будь-який контент: >>> someFile = open ( 'test.txt', 'r') >>> someDoc = someFolder.createDocument ( 'Test Document', contentFile = someFile)
  3. При бажанні ви можете вивести на друк властивості щойно створеного документа (як показано на наступному фрагменті лістингу): >>> props = someDoc.properties >>> for k, v in props.items (): ... print '% s :% s '% (k, v) ... cmis: contentStreamMimeType: text / plain cmis: creationDate: 2009-12-18T10: 59: 26.667-06: 00 cmis: baseTypeId: cmis: document cmis: isLatestMajorVersion: false cmis : isImmutable: false cmis: isMajorVersion: false cmis: objectId: workspace: // SpacesStore / 2cf36ad5-92b0-4731-94a4-9f3fef25b479

витяг об'єктів

Для вилучення будь-якого об'єкта можна використовувати кілька різних способів:

  • Можна виконати CMIS-запит.
  • Можна попросити репозитарій надати вам об'єкт, що відповідає певному шляху, або об'єкт з певним ідентифікатором.
  • Можна здійснити проходження по репозитарій з використанням нащадків папки.
  • Можна отримати вихідний і цільовий об'єкти, пов'язані між собою будь-яким ставленням.

Нижче наведено кілька прикладів, які демонструють ці можливості в дії:

  1. Знаходження документа, створеного в попередньому параграфі, за допомогою повнотекстового пошуку. >>> results = repo.query ( "select * from cmis: document where contains ( 'test')") >>> for result in results: ... print result.name ... Test Document2 Example test script.js
  2. В якості альтернативного варіанту ви також можете отримувати об'єкти за їх шляхах: >>> someDoc = repo.getObjectByPath ( '/ someFolder / Test Document') >>> someDoc.id u'workspace: // SpacesStore / 2cf36ad5-92b0-4731- 94a4-9f3fef25b479 '
  3. Крім того, можна отримати об'єкт з використанням його ідентифікатора: >>> someDoc = repo.getObject ( 'workspace: // SpacesStore / 2cf36ad5-94a4-9f3fef25b479') >>> someDoc.name u'Test Document '
  4. У об'єктів типу Folder є методи getChildren () і getDescendants (), які повертають набір результатів (в посторінково вигляді): >>> children = someFolder.getChildren () >>> for child in children: ... print child.name. .. Test Document Test Document2
  5. У об'єктів типу Folder і Document є метод getRelationships (), який повертає набір об'єктів типу Relationship (Ставлення). Об'єкт типу Relationship дозволяє вам отримати вихідний і цільовий об'єкти, пов'язані з відповідними кінцями цього відносини. >>> rel = testDoc.getRelationships (includeSubRelationshipTypes = 'true') [0] >>> rel.source.name 'testDoc1' >>> rel.target.name 'testDoc2' >>> rel.properties [ 'cmis: objectTypeId ']' R: sc: relatedDocuments '

З наступної статті в даній серії ви дізнаєтеся, як працювати з іншими аспектами API-інтерфейсу, включаючи можливість отримувати визначення типу об'єкта.

Висновок

Інші статті даної серії

Зі статті ви отримали загальне уявлення про бібліотеку cmislib, познайомилися з історією її появи, дізналися про те, що вона робить, а також переглянули кілька базових прикладів. Хотілося б сподіватися, що тепер ви готові перейти до подальшого освоєння специфікації CMIS. Якщо ви цікавитеся мовою Python, то вам слід ближче познайомитися з бібліотекою cmislib. Відповідна посилання наведена в розділі ресурси . Якщо немає, то досліджуйте посилання на інші клієнтські інструменти та бібліотеки, наведені в списку джерел. І Останнє. Ви потрібні співтовариству за специфікацією CMIS. Ви можете посприяти різними способами:

  • У разі відсутності бібліотеки клієнта, написаної на найбільш зручною для вас мовою, створіть таку бібліотеку у вигляді проекту з відкритим вихідним кодом.
  • Допоможіть вашому постачальнику репозитария протестувати його реалізацію CMIS.
  • Напишіть для свого улюбленого порталу інтеграційні компоненти або презентаційну інфраструктуру, яка спрощує роботу з CMIS-сумісними репозитарій.
  • Зробіть свій внесок в існуючі CMIS-проекти з відкритим вихідним кодом, таких як cmislib і Apache Chemistry.
  • Візьміть участь у вдосконаленні специфікації CMIS у співпраці з Технічним комітетом по CMIS в організації OASIS.

Ресурси для скачування

Схожі тими

  • Оригінал статті: " A CMIS API library for Python, Part 1: Introducing cmislib "(EN).
  • Бібліотека API-інтерфейсу для Python, що відповідає специфікації CMIS. Частина 2. Побудова ECM-інструментів для вирішення реальних завдань за допомогою мови Python і бібліотеки cmislib. Створення прикладу додатки . (Jay A. Brown, developerWorks, березень 2010 року). У заключній частині цієї серії специфікація CMIS і мову Python спільно використовуються для побудови ECM-інструменту за допомогою бібліотеки cmislib. Перегляньте текст вихідного року і дізнайтеся, як використовувати цей інструмент в командному рядку.
  • Початкова сторінка по cmislib на ресурсі Google Code (EN). Отримайте більш детальну інформацію по cmislib.
  • Початок роботи зі специфікацією CMIS (EN). Хочете побачити, як працює забезпечує RESTful-зв'язування на основі Atompub? Ознайомтеся з навчальним посібником на блозі Дж. Поттса.
  • Розробка доповнення до браузеру Mozilla Firefox для підтримки специфікації Content Management Interoperability Services (EN): (Gregory Melahn, Shun Zhang, Yan Chen, Hui Jian He і Ziao Wang, developerWorks, грудень 2009 року). Ознайомтеся з оглядом по CMIS і з прикладом CMIS-доповнення для браузера.
  • API-інтерфейси і клієнтські інструменти CMIS : Відвідайте Wiki-ресурс по Lotus Quickr, на якому розміщені результати компіляції репозитаріїв і додатків, що використовують стандарт CMIS від організації OASIS.
  • Технічний комітет з CMIS (EN) в організації OASIS. Вивчіть можливість застосування Web-сервісів і інтерфейсів рівня Web 2.0 для підтримки спільного використання інформації репозитарій управління контентом від різних постачальників.
  • Python и Django (EN). Дізнайтеся докладніше про Python, щоб прискорити свою роботу за рахунок більш ефективної інтеграції систем. Додайте Django, високорівневу Web-інфраструктуру Python, яка допоможе вам швидше будувати високопродуктивні і елегантні Web-додатки.
  • Попередній показ технологій IBM FileNet і IBM Content Manager для специфікації CMIS від організації OASIS (EN). Завантажте та досліджуйте CMIS-зв'язування REST / Atom для репозитаріїв IBM FileNet® і IBM Content Manager.
  • Сертифікація IBM по XML (EN). Дізнайтеся, як отримати сертифікат IBM-Certified Developer in XML (сертифікований корпорацією IBM розробник по XML і пов'язаних технологій).
  • Ознайомчі Версії продуктів IBM . Завантажте ознайомлювальні версії програмних продуктів IBM або скористайтеся їх онлайновими пробними версіями на ресурсі IBM SOA Sandbox (EN) і придбайте досвід роботи з інструментами розробки додатків і продуктами сполучного рівня сімейств DB2®, Lotus®, Rational®, Tivoli® і WebSphere®.
  • Подкасти ресурсу developerWorks (EN): слухайте інтерв'ю та дискусії для розробників ПЗ.

Підпішіть мене на ПОВІДОМЛЕННЯ до коментарів

Jsp?
Можливо, передбачалося, що вона повинна містити PWC-копії витягнутих об'єктів?
Або безпосередньо самі об'єкти?
Хочете побачити, як працює забезпечує RESTful-зв'язування на основі Atompub?