คลาสภาษาทางการแบบใดคือ XML และ JSON ที่มีคีย์เฉพาะ


12

ฉันย้ายคำถามนี้จาก stackoverflowโดยที่ id ไม่มีคำตอบ เรามีคำถามที่คล้ายกันว่า JSON นั้นปกติหรือไม่ :

JSON และ XML มักถูกเรียกว่าเป็นภาษาที่ไม่มีบริบท - ทั้งคู่ถูกระบุโดยหลักไวยากรณ์อย่างเป็นทางการใน EBNF อย่างไรก็ตามสิ่งนี้เป็นจริงสำหรับ JSON ตามที่กำหนดไว้ในRFC 4329 ส่วน 2.2ซึ่งไม่ต้องการเอกลักษณ์ของคีย์วัตถุ (หลายคนอาจไม่รู้ แต่ {"a": 1, "a": 2} เป็น JSON ที่ถูกต้อง!) แต่ถ้าคุณต้องการคีย์ที่ไม่ซ้ำกันใน JSON หรือชื่อแอตทริบิวต์ที่ไม่ซ้ำกันใน XMLสิ่งนี้ไม่สามารถแสดงออกได้ด้วยไวยากรณ์ที่ไม่มีบริบท แต่คลาสภาษาใดของ JSON ที่มีคีย์เฉพาะและ XML ที่มีรูปแบบที่ถูกต้อง (ซึ่งหมายถึงชื่อแอตทริบิวต์ที่ไม่ซ้ำกัน)

หนึ่งในกระดาษที่ดีที่สุดที่ฉันพบในเรื่องนี้ (Murato et al, 2001: Taxonomy ของ XML Schema Languages ​​โดยใช้ทฤษฎีภาษาที่เป็นทางการ ) ไม่รวมข้อ จำกัด ด้านความสมบูรณ์เช่นคีย์ / keyrefs และเอกลักษณ์ที่จะตรวจสอบในชั้นเพิ่มเติม นอกจากนี้เซตย่อยของ XML ที่กำหนดโดย XML Schema หรือโดย DTD นั้นไม่มีบริบท แต่ไม่ใช่ชุดของเอกสาร XML ที่มีรูปแบบสมบูรณ์ทั้งหมด

ฉันคิดว่าระบบซ้อนอัตโนมัติ (= ภาษาที่จัดทำดัชนี) ควรแยก JSON ด้วยข้อ จำกัด คีย์ที่ไม่ซ้ำกัน สำหรับ XML สามารถจำลองคำถามเป็นภาษา S ของรายการจำนวนเต็มที่คั่นด้วยเครื่องหมายจุลภาคทั้งหมด ไม่มีใครรู้เพิ่มเติมโดยเฉพาะอย่างยิ่งกับการอ้างอิง?

PS:อัลกอริทึมง่าย ๆ ในการตัดสินใจภาษา (ข้างส่วนที่ไม่มีบริบท) ขึ้นอยู่กับอัลกอริทึมการเรียงลำดับที่ดี ดังนั้นจึงควร decidable ใน "เวลาเชิงเส้น" กับกรณีที่เลวร้ายที่สุด O (n log n) ฉันไม่ได้พบออกยังไม่ว่าจะเป็นระดับความซับซ้อนเป็นตัวอย่าง"อย่างอ่อนโยนบริบท"หรือ"การจัดทำดัชนี"แต่มันอาจจะมีอะไรบางอย่างระหว่างบริบทฟรีและบริบท (?)

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


JSON ที่มีคีย์อ็อบเจ็กต์ที่ทำซ้ำได้นั้นไม่มีบริบท (ดูไวยากรณ์ JSON) แต่คุณจะแสดงข้อ จำกัด ของคีย์ที่ไม่ซ้ำในไวยากรณ์ทั่วไปหรือออโตเมตันได้อย่างไร หรือ: คลาสความซับซ้อนใดที่เป็นของตัวแยกวิเคราะห์ XML หากสามารถตรวจพบชุดของเอกสาร XML ที่มีรูปแบบที่ดีทั้งหมด (รูปแบบที่ดีหมายถึงชื่อแอตทริบิวต์ที่ไม่ซ้ำกันต่อองค์ประกอบ)
Jakob

1
ใช้คำศัพท์ตัวสร้างคอมไพเลอร์ที่นี่ ไวยากรณ์ที่เกี่ยวข้องของทั้ง JSON และ XML นั้นไม่มีบริบทอย่างแน่นอน คุณสมบัติเช่นตัวระบุที่ไม่ซ้ำกันหรือข้อ จำกัด ประเภทค่าเป็นความหมายแบบสแตติก (บางคนเรียกไวยากรณ์นี้เช่นกัน แต่ฉันปฏิเสธระบบการตั้งชื่อนั้นด้วยเหตุผลหลายประการ) เครื่องสร้าง Parser มักจะอนุญาตให้คุณเพิ่ม parser ทั่วไปด้วยสิ่งต่าง ๆ เช่นภาคไวยากรณ์ / ความหมายที่ไม่จำเป็นต้องไม่มีบริบท ในทางทฤษฎีไวยากรณ์มาประกอบเป็นสินค้า ฉันไม่ทราบว่าคุณสมบัติดังกล่าวสามารถแสดงได้ตามธรรมชาติด้วยไวยากรณ์อย่างเป็นทางการของพลังใด ๆ
ราฟาเอล

1
ส่วนใดของภาษาทางการที่เกินกว่าไวยากรณ์ขึ้นอยู่กับมุมมอง โครงสร้างแบบซ้อนอย่างง่าย ๆ เช่น XML และ JSON สามารถวิเคราะห์คำโดยออโตเมติกแบบกดลง ฉันแค่อยากรู้ว่าพลังการคำนวณใดที่คุณจะได้รับถ้าออโตเมชั่นถูกเสริมด้วยพจนานุกรมเพื่อค้นหาว่ามีการอ่านค่าที่เก็บไว้ก่อนหน้านี้หรือไม่เพื่อให้แน่ใจว่ามีข้อ จำกัด ที่เป็นเอกลักษณ์ ฉันเดาว่ามันเป็นไวยากรณ์ที่ถูกทำดัชนี (เป็น stack stack automaton?) แต่มันมี grammars ที่ทำดัชนีหลายชนิด
Jakob

@Jakob ผมพับสนทนานี้ (ยาก) เป็นคำถามจึงเป็นที่ชัดเจนว่าสิ่งที่คุณกำลังถาม
Suresh Venkat

LBA ควรจะเพียงพอเนื่องจากคุณจะไม่ต้องเก็บตัวระบุมากกว่าที่คุณมีอักขระในข้อความของคุณ ฉันไม่รู้เกี่ยวกับคลาสระหว่าง CFL และ CSL เพียงพอที่จะช่วยได้
Raphael

คำตอบ:


6

การใช้ BNF กับโอเปอเรเตอร์การทำซ้ำของคุณx := S^บอกว่าxเป็นอินสแตนซ์aของสัญลักษณ์Sตามด้วยตัวเลือกอินสแตนซ์bของชุดS - aตัวเลือกตามด้วยอินสแตนซ์cของชุดS - a - bและอื่น ๆ ถ้า|S|เป็นจำนวนที่เป็นไปได้Sและเป็นที่แน่นอนแล้วคือจำนวนที่เป็นไปได้2 ^ |S|! - 1S^

มันไม่มีความหมายจริงๆที่จะพูดในแง่ของพลังการคำนวณของภาษาที่ถูกอธิบายเนื่องจากนี่เป็นเรื่องเกี่ยวกับความหมายแบบสแตติกในช่วงพลบค่ำระหว่างไวยากรณ์และความหมายทั่วไป (ไดนามิก) พลังแห่งการแสดงออกของไวยากรณ์นั้นขยายออกไปเนื่องจากมันมีวิธีการที่เป็นทางการในการแสดงการปรับอินพุตบางประเภท

มันให้วิธีการในการยอมรับการเปลี่ยนแปลงของเซตย่อยของชุดเฉพาะ ฉันไม่คิดว่าจะมีชื่อที่มีอยู่สำหรับภาษาของชั้นนี้ แน่นอนว่ามันไม่ได้ไร้บริบท แต่ข้อกำหนดของบริบทนั้นมีการควบคุมอย่างเข้มงวด หากคุณต้องการคำหนึ่งคำให้ใช้เพียงเหรียญเดียว ผมขอแนะนำให้บริบทเคารพสำหรับการเรียนของภาษาที่ไม่สามารถอธิบายได้ด้วยไวยากรณ์บริบทฟรีโดยไม่มีข้อมูลที่ฝังเพิ่มเติมเกี่ยวกับข้อ จำกัด ของความหมายแบบคงที่ซึ่งจะเป็นธรรมมีรางประโยคในจิตวิญญาณ

แอพลิเคชันที่มีประโยชน์มากที่สุดนี้โดยเฉพาะอย่างยิ่งการขยายอาจเป็นเพียงแค่ความสามารถในการแนะนำข้อ จำกัด ที่ไม่ซ้ำกันที่สำคัญ แต่มันก็ยังช่วยให้คุณสามารถอธิบายชุดที่น่าสนใจเช่นx := [0-7]^ซึ่งตรงกับหมายเลขใด ๆ ของฐานแปด 8 หรือน้อยกว่าตัวเลขที่ไม่ซ้ำ ในฐานะที่เป็นความซับซ้อนของมันพิจารณาว่าองค์ประกอบของชุดที่ได้รับการเห็นไม่เลวร้ายยิ่งกว่าลอการิทึมและความถี่ของการตรวจสอบเป็นเส้นตรงในจำนวนขององค์ประกอบที่ตรงกันเพื่อให้^ผู้ประกอบการคือ decidable แน่นอนในกรณีเลวร้ายที่สุดเวลา linearithmic


ขอบคุณสำหรับคำตอบและคำแนะนำในการคิดเรียงสับเซต แม้ว่าตัวดำเนินการการทำซ้ำที่ไม่ซ้ำกันจะไม่จับคู่คีย์ - ค่าด้วยคีย์ที่ไม่ซ้ำกันความซับซ้อนควรจะเหมือนกันสำหรับกรณีนี้ อย่างไรก็ตามถ้าฉันเริ่มใช้โอเปอเรเตอร์กับโครงสร้างตามอำเภอใจคลาสS^ที่Sเป็น CFL บางอย่างอาจไม่ได้รับบริบทเนื่องจาก CFL ไม่ได้ปิดภายใต้ความแตกต่าง ควรเป็นไปได้ถ้าSเป็นภาษาปกติ แต่น่าเสียดายที่คุณไม่สามารถตัดสินใจได้ว่า CFL ที่กำหนดเป็นปกติหรือไม่ บางทีฉันอาจจะถามคำถามอีกข้อหนึ่งเนื่องจากนี่เป็นข้อ จำกัด ของ JSON และ XML
Jakob
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.