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

نهادهایی که با سرمایه ملت اداره می‌شوند وظیفه‌شان است که داده‌هایی که به مردم تعلق دارد را منتشر کنند. در دنیای امروز این داده‌ها باید برای برنامه‌ها قابل خواندن باشد. هرچند نهادهای اداره کننده کشور ما راه درازی پیش رو دارند تا اینکه روزی بتوانند این نیاز را مطابق انتظار یک گیک برآورنده کنند. به همین خاطر من دست به کار شدم و قانون اساسی را از سایت مرکز پژوهش‌های مجلس پیاده کرده و آن را به فرمت YAML نشانه‌گذاری کرده و روی گیت‌هاب منتشر کردم. استفاده از این فایل طبق مجوز CC 4.0 آزاد است.

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

حین انتقال متن خام از سایت مرکز پژوهش‌های مجلس متوجه نکات جالبی شدم. اول اینکه که حدس می‌زنم داده‌اند کسی متن را از روی یک متن چاپی تایپ کرده است چرا که غلط‌های مختلف تایپی در متن وجود داشت. دیگر اینکه اصلا خبری از نیم‌فاصله نبود. تا جایی که می‌توانستم اصلاح کردم اگر ایرادی مشاهده کردید لطفا روی گیت‌هاب تصحیح کنید و پول ریکوئست بفرستید. در ضمن طرف خیلی هم خسته بوده است. گاهی جملاتی را دوبار تایپ کرده، گاهی هم قانون جدید و قدیم را یکی نوشته که گاها مجبور شدم با سایت مجلس خبرگان کنترل کنم. (آنجا وضع تایپ بدتر بود، مثال از یای فارسی خبری نبود!) اما سخت‌ترین قسمت کار تصمیم‌گیری برای قالب فایل بود طوری که نه سیخ بسوزد نه کباب. یعنی هم فایل خوانایی خودش را حفظ کند و هم من بتوانم کارم را راحت‌تر انجام بدهم.

ساختار کلی فایل به شرح زیر است:

The Constitution:
  Introduction:
  Principles:
    - chapter:
      index:
      history:
        -
      text:

در فایل کلیدهای مختلفی بکار برده‌ام. اما مهمترین کلیدهای بکار رفته در فایل هم به شرح زیر هستند:

  • The Constitution: همه قوانین زیر این مدخل نوشته شده‌اند، یعنی قانون اساسی
  • Introduction: مقدمه‌ی قانون اساسی جمهوری اسلامی ایران
  • Principles: اصول قانون اساسی. یک لیست است.
  • chapter: شماره فصل. قانون اساسی در چهارده فصل تنظیم شده است.
  • index: شماره اصل قانون
  • history: نسخه‌های قبلی. در حال حاضر بعضی اصول فقط یک تاریخچه دارند که به اصلاحیه سال ۱۳۶۸ باز می‌گردد.
  • text: متن هر اصل از قانون

برای خواندن فایل در پایتون می‌توانید از pyyaml استفاده کنید:

$ pip install pyyaml --user
$ git clone https://github.com/mehdisadeghi/iranconstitution
$ cd iranconstitution
$ python
>>> import yaml
>>> f = open('constitution.yaml')
>>> data = yaml.load(f, Loader=yaml.CLoader) # CLoader is super fast
>>> len(data['The Constitution']['Principles'])
177
>>> print(data['The Constitution']['Principles'][1]['text'])

به روال گذشته این پروژه هم صفحه اختصاصی خودش را دارد. همچنین تشکر ویژه از ‏جادی بابت معرفی این پروژه در لینک‌های شاد آخر ماه مرداد.