Lớp ngôn ngữ chính thức nào là XML và JSON với các khóa duy nhất?


12

Tôi đã chuyển câu hỏi này từ stackoverflow nơi id không có câu trả lời. Chúng tôi đã có một câu hỏi tương tự cho dù JSON có thường xuyên không :

JSON và XML thường được gọi là ngôn ngữ không ngữ cảnh - cả hai đều được chỉ định chủ yếu bởi một ngữ pháp chính thức trong EBNF. Tuy nhiên, điều này chỉ đúng với JSON như được định nghĩa trong RFC 4329, phần 2.2 không yêu cầu tính duy nhất của các khóa đối tượng (nhiều người có thể không biết nhưng {"a": 1, "a": 2} là JSON hợp lệ!). Nhưng nếu bạn yêu cầu các khóa duy nhất trong JSON hoặc các tên thuộc tính duy nhất trong XML thì điều này không thể được biểu thị bằng một ngữ pháp không ngữ cảnh. Nhưng đó là lớp ngôn ngữ của JSON với các khóa duy nhất và cho XML được định dạng tốt (hàm ý các tên thuộc tính duy nhất?).

Một trong những bài báo hay nhất tôi tìm thấy về chủ đề này (Murato et al, 2001: Phân loại ngôn ngữ lược đồ XML bằng lý thuyết ngôn ngữ chính thức ) loại trừ rõ ràng các ràng buộc toàn vẹn như khóa / keyrefs và tính duy nhất được kiểm tra trên một lớp bổ sung. Bên cạnh đó, tập hợp con XML được xác định bởi Lược đồ XML hoặc bởi DTD là không có ngữ cảnh. Nhưng không phải là tập hợp đầy đủ của tất cả các tài liệu XML được định dạng tốt.

Tôi nghĩ rằng một máy tự động ngăn xếp lồng nhau (= ngôn ngữ được lập chỉ mục) sẽ có thể phân tích cú pháp JSON với ràng buộc khóa duy nhất. Đối với XML có thể mô phỏng câu hỏi thành ngôn ngữ S của tất cả các danh sách số nguyên duy nhất được phân tách bằng dấu phẩy. Có ai biết nhiều hơn, tốt nhất là với trích dẫn?

PS: Một thuật toán đơn giản để quyết định các ngôn ngữ (bên cạnh phần không ngữ cảnh) dựa trên thuật toán sắp xếp tốt. Do đó, nó có thể được quyết định trong "thời gian tuyến tính" với trường hợp xấu nhất O (n log n). Tôi vẫn chưa phát hiện ra, liệu lớp phức tạp là ví dụ "nhạy cảm với ngữ cảnh" hay "được lập chỉ mục" nhưng có lẽ là thứ gì đó giữa không ngữ cảnh và nhạy cảm ngữ cảnh (?).

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


JSON với các khóa đối tượng có thể lặp lại là không có ngữ cảnh (xem ngữ pháp JSON), nhưng làm thế nào để bạn thể hiện ràng buộc khóa duy nhất trong một ngữ pháp hoặc máy tự động thông thường? Hoặc: Lớp phức tạp nào thuộc về trình phân tích cú pháp XML, nếu nó có thể phát hiện tập hợp tất cả các tài liệu XML được định dạng tốt (được định dạng tốt ngụ ý tên thuộc tính duy nhất cho mỗi phần tử).
Jakob

1
Sử dụng thuật ngữ trình biên dịch ở đây. Cú pháp tương ứng của cả JSON và XML chắc chắn là không có ngữ cảnh. Các thuộc tính như mã định danh duy nhất hoặc hạn chế loại giá trị là ngữ nghĩa tĩnh (một số người cũng gọi cú pháp này, nhưng tôi từ chối danh pháp đó vì một số lý do). Trình tạo trình phân tích cú pháp thường cho phép bạn làm phong phú trình phân tích cú pháp thông thường bằng những thứ như các vị từ cú pháp / ngữ nghĩa không cần ngữ cảnh. Về lý thuyết, các ngữ pháp quy được sử dụng. Tôi không biết các tính năng như vậy có thể được thể hiện một cách tự nhiên bằng các ngữ pháp chính thức của bất kỳ quyền lực nào.
Raphael

1
Những phần của một ngôn ngữ chính thức vượt quá cú pháp, phụ thuộc vào quan điểm. Các cấu trúc lồng nhau đơn giản như XML và JSON có thể được phân tích cú pháp bằng máy tự động đẩy xuống. Tôi chỉ muốn biết, sức mạnh tính toán nào bạn có được, nếu máy tự động được làm giàu với một từ điển để tra cứu xem giá trị được lưu trữ đã được đọc trước đó, để đảm bảo ràng buộc về tính duy nhất. Tôi đoán nó là một ngữ pháp được lập chỉ mục (một máy tự động ngăn xếp lồng nhau?) Nhưng có một số loại ngữ pháp được lập chỉ mục.
Jakob

@Jakob, tôi sẽ gấp cuộc thảo luận này (viết tắt) vào câu hỏi để rõ ràng chính xác những gì bạn đang hỏi
Suresh Venkat

Một LBA là đủ vì bạn sẽ không bao giờ phải lưu trữ nhiều số nhận dạng hơn bạn có các ký tự trong văn bản của mình. Tôi không biết đủ về các lớp giữa CFL và CSL để được giúp đỡ ở đó.
Raphael

Câu trả lời:


6

Sử dụng BNF với toán tử lặp lại duy nhất của bạn, x := S^nói rằng một xthể hiện acủa ký hiệu S, tùy ý theo sau là một thể hiện bcủa tập hợp S - a, chính nó được tùy ý theo sau bởi một thể hiện ccủa tập hợp S - a - b, v.v. Nếu |S|là số lượng có thể S, và là hữu hạn, thì 2 ^ |S|! - 1là số lượng có thể S^.

Thật không có ý nghĩa khi nói về sức mạnh tính toán của ngôn ngữ được mô tả, vì đây là về ngữ nghĩa tĩnh, trong hoàng hôn giữa cú pháp và ngữ nghĩa thông thường (động). Sức mạnh biểu cảm của ngữ pháp được mở rộng, vì nó có một phương thức chính thức để thể hiện một loại thích ứng đầu vào cụ thể.

Cụ thể, nó cung cấp một phương tiện chấp nhận hoán vị một tập hợp con của một tập hợp cụ thể. Tôi không nghĩ rằng có bất kỳ tên hiện có cho lớp ngôn ngữ này. Nó chắc chắn không có ngữ cảnh, nhưng yêu cầu bối cảnh ít nhất là được kiểm soát chặt chẽ. Nếu bạn cần một thuật ngữ cho nó, chỉ cần một xu. Tôi đề nghị sự tôn trọng ngữ cảnh đối với lớp ngôn ngữ không thể được mô tả bằng ngữ pháp không ngữ cảnh mà không có thông tin nhúng bổ sung về các ràng buộc ngữ nghĩa tĩnh, công bằng về mặt tinh thần mơ hồ.

Ứng dụng hữu ích nhất của tiện ích mở rộng cụ thể này có lẽ chỉ là khả năng giới thiệu các ràng buộc khóa duy nhất, nhưng nó cũng cho phép bạn mô tả các bộ thú vị như vậy x := [0-7]^, khớp với bất kỳ số bát phân nào có 8 chữ số không lặp lại. Đối với độ phức tạp của nó, việc xác định xem một phần tử của tập hợp có được nhìn thấy không tệ hơn logarit hay không, và tần suất kiểm tra là tuyến tính theo số lượng phần tử khớp, do đó ^toán tử thực sự có thể quyết định trong thời gian tuyến tính trong trường hợp xấu nhất.


Cảm ơn câu trả lời và cho gợi ý để suy nghĩ về hoán vị của một tập hợp con. Mặc dù toán tử lặp lại duy nhất không bắt được các cặp khóa-giá trị với các khóa duy nhất, nhưng độ phức tạp sẽ giống nhau trong trường hợp này. Tuy nhiên, nếu tôi bắt đầu áp dụng toán tử trên các cấu trúc tùy ý, lớp S^Smột số CFL có thể không có ngữ cảnh vì CFL không bị đóng dưới sự khác biệt. Có thể thực hiện được nếu Slà ngôn ngữ thông thường, nhưng thật không may, bạn không thể quyết định liệu CFL cụ thể có thường xuyên hay không. Có lẽ tôi sẽ đưa ra một câu hỏi khác vì điều này nằm ngoài các ràng buộc của JSON và XML.
Jakob
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.