どの正式な言語クラスは、XMLと一意のキーを持つJSONですか?


12

idが応答しないstackoverflowからこの質問を移動しました。JSONが正規であるかどうかについても同様の質問がありました

JSONとXMLはどちらも頻繁にコンテキストフリー言語と呼ばれます。どちらも主にEBNFの正式な文法で指定されます。ただし、これはRFC 4329、セクション2.2で定義されているオブジェクトキーの一意性を必要としないJSONにのみ当てはまります(多くの人は知らないかもしれませんが、{"a":1、 "a":2}は有効なJSONです)。ただし、JSONの一意のキーまたはXMLの一意の属性名が必要な場合これはコンテキストなしの文法では表現できません。しかし、一意のキーと整形式のXML(一意の属性名を意味しますか?)を持つJSONの言語クラスはどれですか。

このテーマで見つけた最高の論文の1つ(Murato et al、2001:Taxalomy using XML Schema Languages using Formal Language Theory)は、追加のレイヤーでチェックされるキー/キー参照や一意性などの整合性制約を明示的に除外しています。これに加えて、XMLスキーマまたはDTDによって定義されたXMLのサブセットはコンテキストフリーです。しかし、すべての整形式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のような単純なネスト構造は、プッシュダウンオートマトンによって解析できます。一意性の制約を確保するために、オートマトンに保存された値が以前に読み込まれたかどうかを調べる辞書が追加されている場合、どの計算能力が得られるかを知りたいだけです。私はそれがインデックス付き文法(ネストされたスタックオートマトン?)だと思いますが、インデックス付き文法にはいくつかの種類があります。
ヤコブ

それはあなたが求めているまさに明らかですので@Jakobは、私は疑問に(省略)この議論を折るだろう
スレシュヴェンカト

テキストに文字が含まれているよりも多くの識別子を保存する必要がないため、LBAで十分です。私はCFLとCSLの間のクラスについて十分な知識がありません。
ラファエル

回答:


6

あなたのユニークな-繰り返し演算子でBNFを使用して、x := S^と言うxのインスタンスであるaシンボルのS必要に応じてインスタンスに続く、b一連のS - a、自身が必要に応じてインスタンスに続くc一連のS - a - bなど、と。場合|S|の可能な数がありS、かつ有限である、そして2 ^ |S|! - 1可能性の数ですS^

これは、構文と通常の(動的な)セマンティクスの中間の静的なセマンティクスに関するものであるため、記述されている言語の計算能力の観点から話すことはあまり意味がありません。特定のタイプの入力適応を表現する正式な手段があるため、文法の表現力が拡張されます。

具体的には、特定のセットのサブセット順列を受け入れる手段を提供します。このクラスの言語には既存の名前はないと思います。それは確かにコンテキストフリーではありませんが、コンテキスト要件は少なくともかなり厳密に制御されています。用語が必要な場合は、1つだけをコインします。私が提案し、コンテキスト・尊重し、公正であることを静的な意味制約に関する追加埋め込まれた情報なし文脈自由文法で記述することができない言語のクラスにある精神で漠然と構文。

この特定の拡張機能の最も有用なアプリケーションは、おそらく一意キー制約を導入する機能だけですがx := [0-7]^、8などの8進数以下の非反復数字に一致するなどの興味深いセットを記述することもできます。その複雑さに関しては、集合の要素が見られたかどうかを判断することは対数より悪くなく、チェックの頻度は一致した要素の数で線形であるため、^演算子は実際に最悪の線形時間で決定できます。


サブセットの順列で考えるための答えとヒントをありがとう。unique-repetition演算子は一意のキーを持つキーと値のペアをキャッチしませんが、この場合の複雑さは同じでなければなりません。私は、任意の構造上の演算子を適用するために開始する場合は、クラスCFLのは、違いの下で閉じていないため、一部のCFLがあるが、非文脈自由を得ることができます。通常の言語であれば実行可能ですが、残念ながら、特定のCFLが通常の言語であるかどうかを判断することはできません。これはJSONとXMLの制約を超えているため、別の質問をすることもできます。S^SS
ヤコブ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.