Welche formalen Sprachklassen sind XML und JSON mit eindeutigen Schlüsseln?

12

Ich habe diese Frage aus dem Stackoverflow verschoben, wo id keine Antworten erhielt. Wir hatten eine ähnliche Frage, ob JSON regelmäßig ist :

JSON und XML werden häufig als kontextfreie Sprachen bezeichnet - beide werden hauptsächlich durch eine formale Grammatik in EBNF spezifiziert. Dies gilt jedoch nur für JSON gemäß RFC 4329, Abschnitt 2.2, für das keine Eindeutigkeit der Objektschlüssel erforderlich ist (viele wissen möglicherweise nicht, aber {"a": 1, "a": 2} ist gültiges JSON!). Wenn Sie jedoch eindeutige Schlüssel in JSON oder eindeutige Attributnamen in XML benötigen, kann dies nicht durch eine kontextfreie Grammatik ausgedrückt werden. Aber welches ist die Sprachklasse von JSON mit eindeutigen Schlüsseln und für wohlgeformtes XML (was impliziert eindeutige Attributnamen?).

Eine der besten Arbeiten, die ich zu diesem Thema gefunden habe (Murato et al., 2001: Taxonomie von XML-Schemasprachen unter Verwendung der formalen Sprachtheorie ), schließt Integritätsbeschränkungen wie Schlüssel / Schlüsselreferenzen und Eindeutigkeit, die auf einer zusätzlichen Ebene überprüft werden sollen, ausdrücklich aus. Außerdem ist die durch ein XML-Schema oder eine DTD definierte Teilmenge von XML kontextfrei. Aber nicht der vollständige Satz aller wohlgeformten XML-Dokumente.

Ich denke, ein verschachtelter Stapelautomat (= indizierte Sprache) sollte in der Lage sein, JSON mit einer eindeutigen Schlüsselbeschränkung zu analysieren. Für XML kann die Frage auf die Sprache S aller durch Kommas getrennten Listen eindeutiger Ganzzahlen vereinfacht werden. Weiß jemand mehr, vorzugsweise mit Zitaten?

PS: Ein einfacher Algorithmus zur Entscheidung der Sprachen (neben dem kontextfreien Teil) basiert auf einem guten Sortieralgorithmus. Daher sollte es in "linearithmischer Zeit" mit O (n log n) Worst Case entscheidbar sein. Ich habe noch nicht herausgefunden, ob die Komplexitätsklasse zum Beispiel "leicht kontextsensitiv" oder "indiziert" ist, aber wahrscheinlich etwas zwischen kontextfrei und kontextsensitiv (?).

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

Jakob
quelle
JSON mit wiederholbaren Objektschlüsseln ist kontextfrei (siehe JSON-Grammatik), aber wie drücken Sie die eindeutige Schlüsselbeschränkung in einer allgemeinen Grammatik oder einem Automaten aus? Oder: Zu welcher Komplexitätsklasse gehört ein XML-Parser, wenn er die Menge aller wohlgeformten XML-Dokumente erkennen kann (wohlgeformt impliziert eindeutige Attributnamen pro Element).
Jakob
1
Verwenden Sie hier die Begriffe des Compiler-Generators. Die jeweilige Syntax von JSON und XML ist sicherlich kontextfrei. Eigenschaften wie eindeutige Bezeichner oder Werttypbeschränkungen sind statische Semantik (einige Leute nennen diese Syntax auch, aber ich lehne diese Nomenklatur aus mehreren Gründen ab). Mit Parser-Generatoren können Sie einen allgemeinen Parser normalerweise durch syntaktische / semantische Prädikate anreichern , die nicht kontextfrei sein müssen. Theoretisch werden zugeschriebene Grammatiken verwendet. Ich weiß nicht, ob solche Merkmale natürlich mit formalen Grammatiken irgendeiner Macht ausgedrückt werden können.
Raphael
1
Welche Teile einer formalen Sprache über die Syntax hinausgehen, hängt vom Standpunkt ab. Einfache verschachtelte Strukturen wie XML und JSON können von einem Pushdown-Automaten analysiert werden. Ich möchte nur wissen, welche berechenbare Leistung Sie erhalten, wenn der Automat mit einem Wörterbuch angereichert ist, um festzustellen, ob ein gespeicherter Wert zuvor gelesen wurde, um die Eindeutigkeitsbeschränkung sicherzustellen. Ich würde vermuten, dass es sich um eine indizierte Grammatik handelt (ein verschachtelter Stapelautomat?), Aber es gibt verschiedene Arten von indizierten Grammatiken.
Jakob
@ Jakob, ich würde diese Diskussion (abgekürzt) in die Frage falten, damit klar ist, was Sie genau fragen
Suresh Venkat
Ein LBA sollte ausreichen, da Sie niemals mehr Bezeichner speichern müssen, als Sie Zeichen in Ihrem Text haben. Ich weiß nicht genug über Klassen zwischen CFL und CSL, um dort zu helfen.
Raphael

Antworten:

6

Wenn Sie BNF mit Ihrem Operator für eindeutige Wiederholungen verwenden, bedeutet dies x := S^, dass a eine xInstanz aeines Symbols ist S, optional gefolgt von einer Instanz bvon set S - a, selbst optional gefolgt von einer Instanz cvon set S - a - busw. Wenn |S|die Anzahl der möglichen Sund endlich ist, dann 2 ^ |S|! - 1ist die Anzahl der möglichen S^.

Es ist nicht wirklich sinnvoll, über die Rechenleistung der beschriebenen Sprache zu sprechen , da es sich um statische Semantik im Zwielicht zwischen Syntax und gewöhnlicher (dynamischer) Semantik handelt. Die Ausdruckskraft der Grammatik wird erweitert, da sie ein formales Mittel zum Ausdrücken einer bestimmten Art der Eingabeanpassung bietet.

Insbesondere bietet es ein Mittel zum Akzeptieren einer Permutation einer Teilmenge einer bestimmten Menge. Ich glaube nicht, dass es einen Namen für diese Sprachklasse gibt. Es ist sicherlich nicht kontextfrei, aber die Kontextanforderungen werden zumindest ziemlich streng kontrolliert. Wenn Sie einen Begriff dafür benötigen, prägen Sie einfach einen. Ich schlage vor , Kontext-Achtung für die Klasse der Sprachen , die nicht durch eine kontextfreie Grammatik ohne zusätzliche eingebettete Informationen über statische semantische Einschränkungen beschrieben werden kann, die fair zu sein sind vage syntaktische im Geist.

Die nützlichste Anwendung dieser speziellen Erweiterung ist wahrscheinlich nur die Möglichkeit, Einschränkungen für eindeutige Schlüssel einzuführen. Sie können jedoch auch interessante Sätze beschreiben x := [0-7]^, die einer beliebigen Oktalzahl von 8 oder weniger nicht wiederholten Ziffern entsprechen. Was die Komplexität betrifft, ist die Bestimmung, ob ein Element der Menge gesehen wurde, nicht schlechter als logarithmisch, und die Häufigkeit der Überprüfung ist linear in der Anzahl der übereinstimmenden Elemente, so dass der ^Operator tatsächlich in der linearithmischen Zeit im ungünstigsten Fall entscheidbar ist.

Jon Purdy
quelle
Vielen Dank für die Antwort und den Hinweis, in Permutationen einer Teilmenge zu denken. Obwohl der Operator für die eindeutige Wiederholung keine Schlüssel-Wert-Paare mit eindeutigen Schlüsseln abfängt, sollte die Komplexität in diesem Fall gleich sein. Wenn ich jedoch anfange, den Operator auf beliebige Strukturen anzuwenden, wird die Klasse, S^in der Ssich eine CFL befindet, möglicherweise nicht kontextfrei, da CFLs nicht unter Differenz geschlossen werden. Es sollte machbar sein, wenn Ses sich um eine reguläre Sprache handelt, aber leider können Sie nicht entscheiden, ob eine bestimmte CFL regulär ist. Vielleicht werde ich eine andere Frage stellen, da dies außerhalb der Einschränkungen von JSON und XML liegt.
Jakob