Який офіційний мовний клас - це XML та JSON з унікальними ключами?


12

Я перемістив це запитання з stackoverflow, де я не отримав відповідей. У нас було подібне питання, чи регулярно JSON :

І JSON, і XML обидва часто називаються безконтекстними мовами - обидва вони визначаються в основному формальною граматикою в EBNF. Однак це справедливо лише для JSON, визначеного в RFC 4329, розділ 2.2, який не вимагає унікальності клавіш об'єкта (багато хто може не знати, але {"a": 1, "a": 2} є дійсним JSON!). Але якщо вам потрібні унікальні ключі в JSON або унікальні імена атрибутів у XML, це не може бути виражено безконтекстними граматиками. Але який це мовний клас JSON з унікальними ключами та для добре сформованого XML (що передбачає унікальні назви атрибутів?).

Один з найкращих робіт, які я знайшов на цю тему (Murato et al, 2001: Таксономія мов XML-схеми з використанням теорії формальної мови ) явно виключає обмеження цілісності, такі як ключі / keyrefs та унікальність для перевірки на додатковому шарі. Крім цього, підмножина XML, визначена XML-схемою або DTD, не є контекстною. Але не повний набір усіх добре сформованих XML-документів.

Я думаю, що вкладений автоматичний стек (= індексована мова) повинен мати можливість аналізувати JSON з унікальним обмеженням ключів. Для XML можна спростити питання до мови S усіх списків, розділених комами, унікальних цілих чисел. Хтось знає більше, бажано з цитатами?

PS: Простий алгоритм визначення мов (поруч із контекстною частиною) заснований на хорошому алгоритмі сортування. Тому його слід вирішити в "лінійноактичний час" з найгіршим випадком O (n log n). Я ще не з'ясував, чи є клас складності, наприклад, "м'яко- залежно від контексту" , або "індексований", але, ймовірно, щось середнє між контекстом і не залежно від контексту (?).

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


JSON з повторюваними клавішами об'єкта не є контекстним (див. Граматику JSON), але як ви виражаєте унікальне обмеження ключів у загальній граматиці чи автоматиці? Або: До якого класу складності належить аналізатор XML, якщо він може виявити набір усіх добре сформованих XML-документів (добре сформований означає унікальні назви атрибутів на один елемент).
Якоб

1
Використання тут термінів генератора компілятора. Відповідний синтаксис як JSON, так і XML, безумовно, без контексту. Властивості, такі як унікальні ідентифікатори або обмеження типу значення, є статичною семантикою (деякі люди називають і цей синтаксис, але я відкидаю цю номенклатуру з кількох причин). Генератори парсера зазвичай дозволяють збагатити загальний аналізатор такими речами, як синтаксичні / семантичні предикати, які не повинні бути контекстними. Теоретично використовуються приписувані граматики . Я не знаю, чим такі риси можна природно виразити формальними граматиками будь-якої сили.
Рафаель

1
Які частини формальної мови виходять за межі синтаксису, залежить від точки зору. Прості вкладені структури, такі як XML та JSON, можуть бути розібрані автоматом "pushdown". Мені просто хочеться знати, яку обчислювальну потужність ви отримуєте, якщо автомат збагачений словником, щоб перевірити, чи було збережене значення, прочитане раніше, щоб забезпечити обмеження унікальності. Я б здогадався, що це індексована граматика (вкладений автомат стеків?), Але є кілька видів індексованих граматик.
Якоб

@Jakob, я б склав цю дискусію (скорочено) у запитання, щоб зрозуміло, що саме ви запитуєте
Suresh Venkat

LBA має бути достатнім, оскільки вам ніколи не доведеться зберігати більше ідентифікаторів, ніж у вас є символи у вашому тексті. Я не знаю достатньо класів між CFL та CSL, щоб допомогти там.
Рафаель

Відповіді:


6

Використовуючи BNF з вашим оператором унікального повторення, x := S^говорить, що xекземпляр aсимволу S, необов'язково супроводжується екземпляром bнабору S - a, а сам необов'язково після ньогоc набору S - a - bтощо. Якщо |S|число можливих S, а кінцеве, то 2 ^ |S|! - 1число можливих S^.

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

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

Найбільш корисним застосуванням цього конкретного розширення, напевно, є лише можливість введення обмежень унікального ключа, але воно також дозволяє описувати такі цікаві набори як x := [0-7]^, що відповідає будь-якому восьмигранному номеру з 8 або менше неодноразових цифр. Що стосується її складності, то визначення того, чи бачили елемент множини, не гірше логарифмічного, а частота перевірки лінійна за кількістю збіжених елементів, тому ^оператор дійсно вирішується в гіршому випадку лінійноактичного часу.


Дякуємо за відповідь та за підказку подумати в перестановках підмножини. Хоча оператор унікального повторення не вловлює пари ключових значень за допомогою унікальних ключів, складність повинна бути однаковою для цих випадків. Однак, якщо я почну застосовувати оператор у довільних структурах, клас, S^де Sє якийсь CFL, може отримати безконтекстний, оскільки CFL не закриті під різницею. Це повинно бути здійснено, якщоS це звичайна мова, але, на жаль, ви не можете вирішити, чи дана CFL є регулярною. Можливо, я поставлю ще одне питання, оскільки це виходить за межі обмежень JSON та XML.
Якоб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.