Benzersiz anahtarlara sahip XML ve JSON hangi resmi dil sınıflarıdır?


12

Bu soruyu id'in yanıtları olmadığı stackoverflow'dan taşıdım . JSON'un düzenli olup olmadığı konusunda benzer bir sorum vardı :

JSON ve XML'nin her ikisi de genellikle bağlamsız diller olarak adlandırılır - her ikisi de esas olarak EBNF'deki resmi bir dilbilgisi ile belirtilir. Ancak bu sadece nesne anahtarlarının benzersizliğini gerektirmeyen RFC 4329, bölüm 2.2'de tanımlanan JSON için geçerlidir (birçoğu bilmeyebilir ancak {"a": 1, "a": 2} geçerli JSON!). Ancak JSON'da benzersiz anahtarlara veya XML'de benzersiz öznitelik adlarına ihtiyacınız varsa, bu bağlam içermeyen gramerlerle ifade edilemez. Ancak, benzersiz anahtarlara ve iyi biçimlendirilmiş XML'e (benzersiz özellik adlarını ima eden) sahip JSON'un dil sınıfı hangisidir?

Bu konuda bulduğum en iyi makalelerden biri (Murato ve ark., 2001: Biçimsel Dil Teorisini Kullanan XML Şema Dillerinin Taksonomisi ), anahtar / keyref gibi bütünlük kısıtlamalarını ve ek bir katmanda denetlenecek tekliği kısıtlar. Bunun yanı sıra, bir XML Şeması veya bir DTD tarafından tanımlanan XML alt kümesi bağlamdan bağımsızdır. Ancak tüm iyi biçimlendirilmiş XML belgelerinin tamamı değil.

Bence bir iç içe yığın otomatı (= dizinlenmiş dil) benzersiz anahtar kısıtlaması ile JSON ayrıştırmak gerekir. XML, soruyu, benzersiz tamsayıların virgülle ayrılmış tüm listelerinin S diline simleyebilir. Tercihen alıntılarla daha fazlasını bilen var mı?

Not: Dillere karar vermek için basit bir algoritma (bağlamsız bölümün yanında) iyi bir sıralama algoritmasına dayanır. Bu nedenle "lineeritmik zamanda" O (n log n) en kötü durumda karar verilebilir olmalıdır. Karmaşıklık sınıfının örneğin "hafif içeriğe duyarlı" veya "dizinli" olup olmadığını, ancak muhtemelen bağlamsız ve içeriğe duyarlı (?) Arasında bir şey olup olmadığını henüz bulamadım .

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


Tekrarlanabilir nesne anahtarlarına sahip JSON bağlamdan bağımsızdır (JSON dilbilgisine bakın), ancak ortak bir dilbilgisi veya otomattaki benzersiz anahtar kısıtlamasını nasıl ifade edersiniz? Veya: Hangi karmaşıklık sınıfının bir XML ayrıştırıcısına ait olduğu, tüm iyi biçimlendirilmiş XML belgelerinin kümesini algılayabilirse (iyi biçimlendirilmiş öğe başına benzersiz öznitelik adları anlamına gelir).
Jakob

1
Derleyici oluşturucu terimlerini burada kullanmak. İlgili sözdizimi JSON ve XML hem kesinlikle bağlama serbesttir. Benzersiz tanımlayıcılar veya değer türü kısıtlamaları gibi özellikler statik anlambilimdir (bazı insanlar bu sözdizimini de adlandırır, ancak bu isimlendirmeyi birkaç nedenden dolayı reddediyorum). Ayrıştırıcı üreteçleri genellikle, ortak bir ayrıştırıcıyı bağlam bağımsız olması gerekmeyen sözdizimsel / anlamsal tahminler gibi şeylerle zenginleştirmenize izin verir . Teoride, atfedilen gramerler kullanılır. Bu tür özelliklerin herhangi bir gücün resmi dilbilgisi ile doğal olarak ifade edilip edilemeyeceğini bilmiyorum.
Raphael

1
Biçimsel bir dilin hangi bölümleri sözdiziminin ötesine geçer, bakış açısına bağlıdır. XML ve JSON gibi basit iç içe yapılar, bir aşağı açılan otomatla ayrıştırılabilir. Sadece bilmek istiyorum, hangi hesaplanabilir güç, eğer otomat bir sözlük ile zenginleştirilmiş olup olmadığını saklanmış bir değerin daha önce okunmuş olup olmadığını görmek için, benzersizlik kısıtlaması sağlamak için. Ben onun bir dizinlenmiş dilbilgisi (iç içe bir yığın otomat?) Tahmin ediyorum ama dizinli dilbilgisi birkaç türü vardır.
Jakob

@ Jakob, bu tartışmayı (kısaltılmış) soruya katladım, bu yüzden sorduğunuz şey tam olarak açık
Suresh Venkat

Metninizde karakterden daha fazla tanımlayıcı depolamanız gerekmeyeceğinden, bir LBA yeterli olmalıdır. Orada yardımcı olacak CFL ve CSL sınıfları hakkında yeterince bilgim yok.
Raphael

Yanıtlar:


6

Benzersiz-tekrarlama operatörüyle BNF kullanarak, x := S^bir diyor xbir örneğidir asembolün S, isteğe öğesinin ardından bsetin S - a, kendisi isteğe öğesinin ardından csetin S - a - bbenzeri, vb. Eğer |S|mümkünse sayısıdır S, ve sonlu, daha sonra 2 ^ |S|! - 1mümkün sayısıdır S^.

Tanımlanan dilin hesaplama gücü açısından konuşmak gerçekten anlamlı değildir , çünkü bu statik anlambilim ile ilgilidir, sözdizimi ile sıradan (dinamik) anlambilim arasındaki alacakaranlıkta. Dilbilgisinin ifade gücü, belirli bir tür giriş adaptasyonunu ifade etmek için resmi bir araca sahip olduğundan genişletilir.

Özellikle, belirli bir kümenin bir alt kümesinin permütasyonunu kabul etmenin bir yolunu sunar . Bu dil sınıfı için mevcut bir isim olduğunu sanmıyorum. Kesinlikle bağlamdan bağımsız değil, ancak bağlam gereksinimi en azından oldukça sıkı bir şekilde kontrol ediliyor. Bunun için bir terime ihtiyacınız varsa, sadece bir tanesini paralayın. Önerim bağlama saygı fuarı olma statik semantik kısıtlamaları hakkında ek gömülü bilgi olmadan bir serbest içerik ile tarif edilemez dillerin sınıfı için olan ruhu içinde belli belirsiz sözdizimsel.

Bu özel uzantının en kullanışlı uygulaması muhtemelen sadece benzersiz anahtar kısıtlamaları getirme yeteneğidir, ancak aynı zamanda x := [0-7]^8 veya daha az tekrarlanan basamak olmayan herhangi bir sekizlik sayı ile eşleşen ilginç kümeleri tanımlamanızı sağlar . Karmaşıklığına gelince, setin bir elemanının görülüp görülmediğini belirlemek logaritmikten daha kötü değildir ve kontrol sıklığı eşleşen elemanların sayısında lineerdir, bu nedenle ^operatör gerçekten en kötü lineermik zamanda karar verilebilir.


Cevabınız için ve bir alt kümenin permütasyonlarında düşünebileceğiniz ipucu için teşekkürler. Benzersiz yineleme operatörü benzersiz anahtarlarla anahtar / değer çiftlerini yakalamasa da, bu durumlar için karmaşıklık aynı olmalıdır. Ancak, operatörü rasgele yapılara uygulamaya başlarsam , bazı CFL'nin S^bulunduğu sınıf Sbağlamsız olabilir, çünkü CFL'ler farkla kapatılmaz. SNormal bir dil ise yapılabilir olmalıdır , ancak ne yazık ki belirli bir CFL'nin düzenli olup olmadığına karar veremezsiniz. Belki de JSON ve XML kısıtlamalarının ötesinde olduğu için başka bir soru soracağım.
Jakob
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.