Kelas bahasa formal mana yang XML dan JSON dengan kunci unik?

12

Saya memindahkan pertanyaan ini dari stackoverflow di mana id tidak mendapat jawaban. Kami memiliki pertanyaan serupa apakah JSON biasa :

JSON dan XML keduanya sering disebut sebagai bahasa bebas konteks - keduanya ditentukan terutama oleh tata bahasa formal di EBNF. Namun ini hanya berlaku untuk JSON sebagaimana didefinisikan dalam RFC 4329, bagian 2.2 yang tidak memerlukan keunikan kunci objek (banyak yang mungkin tidak tahu tetapi {"a": 1, "a": 2} adalah JSON yang valid!). Tetapi jika Anda memerlukan kunci unik di JSON atau nama atribut unik dalam XML, ini tidak dapat diungkapkan oleh tata bahasa bebas konteks. Tetapi yang merupakan kelas bahasa JSON dengan kunci unik dan untuk XML yang terbentuk dengan baik (yang menyiratkan nama atribut yang unik?).

Salah satu makalah terbaik yang saya temukan pada subjek ini (Murato et al, 2001: Taksonomi Bahasa Skema XML menggunakan Teori Bahasa Formal ) secara eksplisit mengecualikan kendala integritas seperti kunci / keyrefs dan keunikan untuk diperiksa pada lapisan tambahan. Selain itu, bagian dari XML yang ditentukan oleh Skema XML atau DTD adalah bebas konteks. Tapi bukan set lengkap semua dokumen XML yang terbentuk dengan baik.

Saya pikir otomat stack bertumpuk (= bahasa yang diindeks) harus dapat mengurai JSON dengan batasan kunci yang unik. Untuk XML dapat menyederhanakan pertanyaan ke bahasa S dari semua daftar bilangan bulat unik yang dipisahkan koma. Adakah yang tahu lebih banyak, lebih disukai dengan kutipan?

PS: Algoritma sederhana untuk memutuskan bahasa (di samping bagian bebas konteks) didasarkan pada algoritma pengurutan yang baik. Oleh karena itu harus decidable dalam "waktu linearithmic" dengan O (n log n) kasus terburuk. Saya belum menemukan, apakah kelas kompleksitas misalnya "agak konteks-sensitif" , atau "diindeks" tetapi mungkin sesuatu antara bebas konteks dan peka konteks (?).

x := a+ x := a | x a^a^a

Jakob
sumber
JSON dengan kunci objek yang dapat diulang bebas konteks (lihat tata bahasa JSON), tetapi bagaimana Anda mengekspresikan batasan kunci unik dalam tata bahasa atau otomat umum? Atau: Yang kelas kompleksitas milik parser XML, jika dapat mendeteksi set semua dokumen XML yang terbentuk dengan baik (well-formed menyiratkan nama atribut unik per elemen).
Jakob
1
Menggunakan istilah generator kompiler di sini. Sintaksis masing-masing dari JSON dan XML tentu bebas konteks. Properti seperti pengidentifikasi unik atau batasan tipe nilai adalah semantik statis (beberapa orang menyebut sintaks ini juga, tapi saya menolak nomenklatur itu karena beberapa alasan). Generator Parser biasanya memungkinkan Anda untuk memperkaya parser umum dengan hal-hal seperti predikat sintaksis / semantik yang tidak perlu bebas konteks. Secara teori, tata bahasa terkait digunakan. Saya tidak tahu apakah fitur tersebut dapat diekspresikan secara alami dengan tata bahasa formal dari kekuatan apa pun.
Raphael
1
Bagian mana dari bahasa formal yang melampaui sintaksis, bergantung pada sudut pandangnya. Struktur bersarang sederhana seperti XML dan JSON dapat diurai oleh automat pushdown. Saya hanya ingin tahu, kekuatan komputasi mana yang Anda dapatkan, jika otomat diperkaya dengan kamus untuk mencari tahu apakah nilai yang disimpan telah dibaca sebelumnya, untuk memastikan kendala keunikan. Saya kira ini adalah tata bahasa yang diindeks (sebuah stack stack automaton?) Tetapi ada beberapa jenis tata bahasa yang diindeks.
Jakob
@ Jakob, saya akan melipat diskusi ini (disingkat) menjadi pertanyaan sehingga jelas apa yang Anda tanyakan
Suresh Venkat
LBA harus mencukupi karena Anda tidak akan pernah harus menyimpan lebih banyak pengidentifikasi daripada karakter dalam teks Anda. Saya tidak cukup tahu tentang kelas antara CFL dan CSL untuk membantu di sana.
Raphael

Jawaban:

6

Menggunakan BNF dengan operator pengulangan unik Anda, x := S^mengatakan bahwa sebuah xinstance adari simbol S, secara opsional diikuti oleh instance bdari set S - a, itu sendiri secara opsional diikuti oleh instance cdari set S - a - b, dan sebagainya. Jika |S|adalah jumlah yang mungkin S, dan terbatas, maka 2 ^ |S|! - 1adalah jumlah yang mungkin S^.

Tidak terlalu berarti untuk berbicara dalam hal kekuatan komputasi dari bahasa yang dijelaskan, karena ini adalah tentang semantik statis, di senja antara sintaks dan semantik biasa (dinamis). Kekuatan ekspresif dari tata bahasa diperluas, karena ia memiliki sarana formal untuk mengekspresikan jenis adaptasi input tertentu.

Secara khusus, ini menyediakan sarana untuk menerima permutasi dari himpunan bagian dari set tertentu. Saya rasa tidak ada nama yang ada untuk kelas bahasa ini. Ini tentu saja tidak bebas konteks, tetapi persyaratan konteks setidaknya cukup ketat dikontrol. Jika Anda membutuhkan istilah untuk itu, cukup koin satu. Saya menyarankan menghormati konteks untuk kelas bahasa yang tidak dapat dijelaskan oleh tata bahasa bebas konteks tanpa tambahan informasi yang melekat tentang kendala semantik statis, yang harus adil secara samar sintaksis dalam roh.

Aplikasi yang paling berguna dari ekstensi khusus ini mungkin hanya kemampuan untuk memperkenalkan batasan kunci unik, tetapi juga memungkinkan Anda menggambarkan set yang menarik seperti x := [0-7]^, yang cocok dengan angka oktal 8 atau lebih sedikit angka yang tidak diulang. Adapun kompleksitasnya, menentukan apakah suatu elemen himpunan telah terlihat tidak lebih buruk daripada logaritmik, dan frekuensi pemeriksaan adalah linier dalam jumlah elemen yang cocok, sehingga ^operator memang dapat dipilih dalam waktu linearitmik kasus terburuk.

Jon Purdy
sumber
Terima kasih atas jawabannya dan petunjuk untuk berpikir dalam permutasi dari suatu subset. Meskipun operator pengulangan unik tidak menangkap pasangan nilai kunci dengan kunci unik, kerumitannya harus sama untuk kasus ini. Namun, jika saya mulai menerapkan operator pada struktur sewenang-wenang, kelas di S^mana Sbeberapa CFL mungkin menjadi bebas-konteks karena CFL tidak ditutup berdasarkan perbedaan. Ini harus bisa dilakukan jika Smerupakan bahasa biasa, tetapi sayangnya Anda tidak dapat memutuskan apakah CFL yang diberikan adalah biasa. Mungkin saya akan mengajukan pertanyaan lain karena ini melampaui batasan JSON dan XML.
Jakob