Jump to content

Wikipedia Abstrak/Kanonik dan normal

From Meta, a Wikimedia project coordination wiki
This page is a translated version of the page Abstract Wikipedia/Canonical and normal and the translation is 62% complete.

Kami akhir-akhir ini berdiskusi tentang bentuk kanonik dan normal untuk representasi JSON dari ZObject.

Untuk kebanyakan kontributor dan pengguna Wikifunctions, ini tidak benar-benar penting: UX seharusnya menyembunyikan representasi JSON dari mereka. Namun untuk kasus di mana ini penting, berikut adalah sedikit latar belakang.

Objek-objek JSON yang berbeda bisa menggambarkan ZObject yang sama. Ada dua bentuk yang terdefinisikan dengan baik: bentuk normal dan bentuk kanonik. Itulah yang digunakan dalam sistem ini. Terkadang, kontributor boleh menuliskan sesuatu yang ada di pertengahannya, dan seluruh sistem seharusnya menerimanya.

Normalisasi seharusnya mengembalikan bentuk normal yang sama dari masukan apa pun selama berbentuk benar. Kanonikalisasi seharusnya mengembalikan bentuk kanonik yang sama dari masukan apa pun selama berbentuk benar. Akibatnya, kebanyakan tempat seharusnya tidak peduli apa yang mereka terima selama berbentuk benar. Mereka bisa melakukan kanonikalisasi atau normalisasi kemudian mendapatkan masukan dalam format yang mereka inginkan.

Secara internal, kami menyimpan bentuk kanonik dalam basis data dan lebih senang menggunakan bentuk kanonik saat menampilkannya kepada pengguna. Bentuk normal digunakan dalam hampir semua kasus lain, khususnya ketika memproses data di orkestrator atau ujung depan.

Terakhir, ada yang disebut labelisasi. Ini artinya mengganti setiap referensi ZID atau kunci dengan label dalam bahasa yang diberikan. That is usually a lossy step: an un-labelizer will not necessarily work. This is purely for output purposes. In the following we show the labelized version on the left, and the raw version on the right.

Here's a function call in normal form:

Human-readable form Normal form
{
  "type": {
    "type": "Reference",
    "reference ID": "Function call"
  },
  "function": {
    "type": "Reference",
    "reference ID": "Head"
  },
  "list": {
    "type": "List",
    "head": {
      "type": "String",
      "value": "a"
    },
    "tail": {
        "type": "List"
    }
  }
}
{
  "Z1K1": {
    "Z1K1": "Z9",
    "Z9K1": "Z7"
  },
  "Z7K1": {
    "Z1K1": "Z9",
    "Z9K1": "Z811"
  },
  "Z811K1": {
    "Z1K1": "Z10",
    "Z10K1": {
      "Z1K1": "Z6",
      "Z6K1": "a"
    },
    "Z10K2": {
        "Z1K1": "Z10"
    }
  }
}

That same function call in canonical form:

Human-readable form Canonical form
{
  "type": "Function call",
  "function": "Head",
  "list": [ "a" ]
}
{
  "Z1K1": "Z7",
  "Z7K1": "Z811",
  "Z811K1": [ "a" ]
}

The same function call in what most software developers would consider a reasonably readable form:

Head(["a"])

This is the call to the function Head on one argument which is a list with one element, that element being the string "a". Head returns the first element of a list, so the result of that function call would be, in normal form:

{
  "type": "String",
  "value": "a"
}
{
  "Z1K1": "Z6",
  "Z6K1": "a"
}

or, in canonical form, simply:

"a"

Karena kami terkadang bingung dengan terminologi ini, kami juga menyebut bentuk normal sebagai bentuk "panjang" atau "eksplisit". Istilah "normal" terinspirasi dari konsep normalisasi basis data. Bentuk kanonik juga kami sebut bentuk "pendek" atau "padat", karena biasanya lebih singkat. Kanonikalisasi adalah istilah yang biasa untuk langkah ini dalam ilmu komputer. Perhatikan bahwa dalam ilmu komputer, kanonikalisasi dan normalisasi sering dijadikan sinonim dari satu sama lain, makanya bentuk "pendek" dan "panjang" lebih sedikit menimbulkan kebingungan.