pyRegRep
Бібліотека Python для парсування та обробки XML документів у форматі RIM (Registry Information Model) / ebXML.
Опис
pyRegRep — інструмент для роботи з XML документами стандарту Registry Information Model (RIM), що застосовується в системах eGovernment та обміну даними (зокрема, OOTS/EDM). Бібліотека дозволяє легко витягувати, аналізувати та серіалізувати дані з RIM/ebXML документів, а також програмно створювати коректні RIM-слоти різних типів.
Можливості
- ✅ Парсування RIM/ebXML XML документів (
bytesабоstr) - ✅ Автоматична обробка просторів імен (namespaces)
- ✅ Витягування запитів (Query), винятків (Exception) та об'єктів реєстру (RegistryObject)
- ✅ Обробка всіх типів значень: Boolean, String, Integer, DateTime, Collection, InternationalString, AnyValue
- ✅ Серіалізація даних у зручний Python-формат (
dict) - ✅ Фабрика слотів
get_slot()— програмне створення RIM-слотів за типом - ✅ Серіалізація
AnyValueTypeчерезxmltodict(параметрany_type=True) - ✅ Підтримка вкладених колекцій та складних структур
Вимоги
- Python: >= 3.10
- Залежності:
lxml >= 5.2.1— робота з XMLxmltodict >= 0.13.0— серіалізаціяAnyValueType
Установка
# З PyPI (якщо опубліковано)
pip install pyRegRep
# З локального джерела (editable)
pip install -e .
Під час встановлення через pip install pyRegRep або pip install -e . runtime-залежності (lxml, xmltodict) встановлюються автоматично.
Швидкий старт
Парсування XML документу
from pyRegRep4.RIMParsing import Parsing
with open("document.xml", "rb") as f:
parser = Parsing(f.read())
# Усі слоти у вигляді {category: {name: (type, value)}}
print(parser.slots)
# Серіалізовані дані (без типової інформації)
print(parser.serialize())
# Серіалізація з обробкою AnyValueType в dict
print(parser.serialize(any_type=True))
Програмне створення RIM-слотів
import datetime
from lxml import etree
from pyRegRep4.RIMElement import get_slot
# Текстовий слот
slot = get_slot("SpecificationIdentifier", "StringValueType", "oots-edm:v1.2")
print(slot.name) # 'SpecificationIdentifier'
print(slot.value) # 'oots-edm:v1.2'
print(slot.text) # XML як bytes
# Логічний слот
slot = get_slot("PossibilityForPreview", "BooleanValueType", True)
# Слот дата/час
slot = get_slot("IssueDateTime", "DateTimeValueType", datetime.datetime.now())
# Багатомовний слот через dict-список
slot = get_slot(
"Title",
"InternationalStringValueType",
[
{"lang": "en", "text": "Birth Certificate"},
{"lang": "uk", "text": "Свідоцтво про народження"},
],
)
# Довільний XML (AnyValueType)
elem = etree.Element("CustomData")
elem.text = "Payload"
slot = get_slot("CustomPayload", "AnyValueType", elem)
API Довідник
Клас Parsing (pyRegRep4.RIMParsing)
Конструктор
Parsing(doc: bytes | str)
| Параметр | Тип | Опис |
|---|---|---|
doc |
bytes | str |
XML документ |
Атрибути
| Атрибут | Тип | Опис |
|---|---|---|
xml |
str |
XML як рядок |
doc |
etree._Element |
Розібраний XML документ |
query |
etree._Element | None |
Елемент Query (якщо є) |
exception |
etree._Element | None |
Елемент Exception (якщо є) |
objects |
list |
Список RegistryObject елементів |
slots |
dict |
Всі слоти у форматі {category: {name: (type, value)}} |
Категорії slots: "doc", "query", "exception", "object".
Метод serialize(any_type: bool = False) -> dict
Серіалізує слоти в чистий Python-формат, видаляючи типову інформацію.
| Тип значення | Python-результат |
|---|---|
BooleanValueType |
bool |
StringValueType |
str |
DateTimeValueType |
str (ISO format) |
IntegerValueType |
int |
CollectionValueType |
list |
InternationalStringValueType |
list[dict] з ключами lang/text |
AnyValueType (за замовчуванням) |
etree._Element |
AnyValueType (з any_type=True) |
dict (через xmltodict) |
Функція get_slot() (pyRegRep4.RIMElement)
get_slot(name: str, slot_type: str, value: Any) -> Xml
Фабрика для програмного створення RIM-слотів.
| Параметр | Тип | Опис |
|---|---|---|
name |
str |
Ім'я слота |
slot_type |
str |
Тип слота (див. таблицю нижче) |
value |
Any |
Значення слота |
Підтримані типи:
slot_type |
Тип value |
Опис |
|---|---|---|
"StringValueType" |
str |
Текстовий рядок |
"BooleanValueType" |
bool |
Логічне значення |
"DateTimeValueType" |
datetime.datetime або str |
Дата/час |
"CollectionValueType" |
etree._Element |
Колекція елементів |
"AnyValueType" |
etree._Element |
Довільний XML елемент |
"InternationalStringValueType" |
etree._Element, list[etree._Element] або list[dict] |
Багатомовний текст |
Повертає об'єкт Xml з властивостями:
name— ім'я слотаvalue— значенняelement— XML елемент (etree._Element)text— серіалізований XML (bytes)
Викидає ValueError при невідомому типі слота.
try:
slot = get_slot("Bad", "UnknownType", "value")
except ValueError as e:
print(e) # Невідомий тип слота: UnknownType. Підтримувані типи: [...]
Клас NS (pyRegRep4.NS)
Базовий клас для управління RIM namespace. Надає метод _tname(prefix, localname) для генерування кваліфікованих імен тегів у нотації Clark.
Виняток ParsingError (pyRegRep4.RIMParsing)
Базовий клас для помилок парсування. Кидається при некоректному XML або відсутньому namespace.
Структура проекту
pyRegRep/
├── pyRegRep4/
│ ├── __init__.py # Експорт: get_slot та типи слотів
│ ├── RIMElement.py # Класи слотів + фабрика get_slot()
│ ├── RIMParsing.py # Парсер Parsing + serialize()
│ └── NS.py # Базовий клас для namespace
├── tests/
│ ├── conftest.py # sys.path для CI
│ ├── test_rim_parsing.py # Тести парсера
│ ├── test_rim_element.py # Тести get_slot() та типів слотів
│ ├── EDM_Ferst_Request.xml
│ ├── EDM_Ferst_Response.xml
│ ├── EDM_Second_Request.xml
│ └── EDM_Second_Response.xml
├── example/
│ ├── Example_1.py
│ ├── example_anyvaluetype_usage.py
│ └── example_get_slot_usage.py
├── setup.py
├── pyproject.toml
├── requirements.txt
└── README.md
Запуск тестів
# Встановлення залежностей
pip install lxml xmltodict pytest
# Усі тести
python -m pytest --disable-warnings -q
# Тільки тести парсера
python -m pytest tests/test_rim_parsing.py -v
# Тільки тести слотів
python -m pytest tests/test_rim_element.py -v
Логування
Бібліотека використовує стандартний logging. Для увімкнення:
import logging
logging.basicConfig(level=logging.DEBUG)
Технічні деталі
Обробка просторів імен
Namespace витягуються автоматично з кореневого елемента документа та зберігаються у parser._ns у форматі {prefix: uri}.
Формат slots
{
"doc": {
"SpecificationIdentifier": ("StringValueType", "oots-edm:v1.2"),
"IssueDateTime": ("DateTimeValueType", "2024-03-15T10:30:00"),
"PossibilityForPreview": ("BooleanValueType", "false"),
},
"query": {},
"exception": {},
"object": {}
}
Автор
Andrey Shapovalov — mt.andrey@gmail.com
Ліцензія
MIT License — див. файл LICENSE
Посилання
Версія: 11 · Оновлено: 2026-03-11
Metadata
Release files for pyRegRep 11
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pyregrep-11.tar.gz | 18.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pyregrep-11-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 32.0 kB
Release files / pyregrep-11.tar.gz
| Download URL | pyregrep-11.tar.gz |
|---|---|
| Size | 18.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6b9d97d7048a808093022ae47a6ec885b74a10274ee464d46d6dcc975a462e81
|
|
BLAKE2b-256 checksum How to use checksums |
c74023bf6f4a49248bff0eb037f3d2a17d9c7bc904b35b750b151534ee31df4e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 24, 2026.
Transparency logRelease files / pyregrep-11-py3-none-any.whl
| Download URL | pyregrep-11-py3-none-any.whl |
|---|---|
| Size | 13.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d8b8cab16b2adc21151544b681caf030762466defaa98eddc32e60d255d197e8
|
|
BLAKE2b-256 checksum How to use checksums |
63f1e906fc3f6d1d0ca73658706e9ad6f59f0938b530e6dd53eea650ad1e9c91
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 24, 2026.
Transparency log