고유 키가있는 XML 및 JSON은 어떤 공식 언어 클래스입니까?


12

id가 응답이없는 stackoverflow 에서이 질문을 옮겼습니다 . JSON이 규칙적인지 비슷한 질문이있었습니다 .

JSON과 XML은 모두 문맥이없는 언어라고 불리우며 주로 EBNF의 공식 문법으로 지정됩니다. 그러나 이것은 RFC 4329, 섹션 2.2에 정의 된 JSON의 경우에만 해당되며 , 객체 키의 고유성을 요구하지 않습니다 (많은 사람은 모르지만 { "a": 1, "a": 2}는 유효한 JSON입니다!). 그러나 JSON의 고유 키 또는 XML의 고유 속성 이름 이 필요한 경우 컨텍스트없는 문법으로 표현할 수 없습니다. 그러나 고유 키와 올바른 형식의 XML (고유 한 속성 이름을 의미 함)이있는 JSON의 언어 클래스는 무엇입니까?

이 주제에서 내가 찾은 최고의 논문 중 하나 (Murato et al, 2001 : Formal Language Theory를 사용한 XML 스키마 언어의 분류법 )는 추가 계층에서 확인할 키 / 키 참조 및 고유성과 같은 무결성 제약 조건을 명시 적으로 제외합니다. 이 외에도 XML 스키마 또는 DTD에 의해 정의 된 XML의 하위 집합에는 컨텍스트가 없습니다. 그러나 제대로 구성된 모든 XML 문서의 전체 세트는 아닙니다.

중첩 스택 오토 마톤 (= 색인 언어)이 고유 키 제약 조건으로 JSON을 구문 분석 할 수 있어야한다고 생각합니다. XML의 경우 쉼표로 구분 된 모든 고유 정수 목록의 언어 S에 대한 질문을 단순화 할 수 있습니다. 누구나 인용문으로 더 많이 알고 있습니까?

추신 : 언어를 결정하는 간단한 알고리즘 (문맥이없는 부분 제외)은 좋은 정렬 알고리즘을 기반으로합니다. 따라서 최악의 경우 O (n log n) 인 "선형 시간"으로 결정할 수 있어야합니다. 복잡성 클래스가 "가벼운 컨텍스트 인식" 인지 또는 "인덱싱 된" 인지에 대해서는 아직 알지 못했지만 컨텍스트가없는 것과 컨텍스트에 민감한 (?) 사이에있을 수 있습니다.

편집 : 어쩌면 나는 더 이론적 인 컴퓨터 과학자들의 질문을 더 잘 재구성 할 수 있습니다. Backus-Naur-Form에서 반복적으로 표현할 수있는 모든 언어의 클래스 CFL ( )이 . 나는 "고유의 인스턴스가 반복에게"연산자를 도입하면 지금은 연산 능력으로 무엇을 얻는가 그래서, 의 순서입니다 단말기의 다른 시퀀스의 경우 각 요소의 결과는?x := a+ x := a | x a^a^a


반복 가능한 객체 키가있는 JSON에는 컨텍스트가 없지만 (JSON 문법 참조) 일반적인 문법 또는 자동으로 고유 키 제약 조건을 어떻게 표현합니까? 또는 올바른 형식의 모든 XML 문서 세트를 감지 할 수있는 경우 XML 구문 분석기에 속하는 복잡성 클래스 (잘 구성된 형식은 요소 당 고유 한 속성 이름을 의미 함).
Jakob

1
여기에서 컴파일러 생성기 용어를 사용하십시오. JSON과 XML 의 각각의 구문 은 확실히 컨텍스트가 없습니다. 고유 식별자 또는 값 형식 제한과 같은 속성은 정적 의미론입니다 (일부 사람들도이 구문을 호출하지만 여러 가지 이유로 그 명명법을 거부합니다). 파서 생성기는 일반적 으로 문맥이 필요하지 않은 구문 / 의미 적 술어 와 같은 것들로 공통 파서를 강화할 수 있습니다 . 이론적으로 는 문법 이 사용됩니다. 나는 그러한 특징들이 어떤 공식적인 문법으로 자연스럽게 표현 될 수 있는지 모른다.
Raphael

1
공식 언어 의 어느 부분이 구문을 넘어서는지는 관점에 달려 있습니다. 푸시 다운 자동 장치를 사용하면 XML 및 JSON과 같은 간단한 중첩 구조를 구문 분석 할 수 있습니다. 나는 독창성 제약을 보장하기 위해 저장된 값을 읽었는지 여부를 검색하는 사전이 오토 마톤에 풍부하다면 어떤 계산 능력을 얻는 지 알고 싶습니다. 색인화 된 문법 (중첩 된 스택 오토 마톤?)을 추측 할 수 있지만 여러 종류의 색인화 된 문법이 있습니다.
야콥

@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|! - 1가능 수이다 S^.

구문과 일반적인 (동적) 의미 사이의 황혼에서 정적 의미에 관한 것이기 때문에 설명되는 언어 의 계산 능력 측면에서 이야기하는 것은 실제로 의미가 없습니다 . 의 표현력 문법 이 입력 적응의 특정 유형을 표현하는 형식 수단을 갖기 때문에, 연장된다.

특히, 특정 집합 의 하위 집합순열을 수락하는 수단을 제공합니다 . 이 언어 클래스에 대한 기존 이름이 없다고 생각합니다. 확실히 컨텍스트가 없지만 컨텍스트 요구 사항은 적어도 엄격하게 제어됩니다. 용어가 필요하면 동전 하나만 넣으십시오. 내가 제안 상황 존중 박람회가 될 정적 의미 론적 제약 조건에 대한 자세한 포함 된 정보없이 문맥 자유 문법에 의해 설명 될 수없는 언어의 클래스에 대한이 있습니다 정신 막연 구문.

특정 확장 의 가장 유용한 응용 프로그램은 아마도 고유 키 제약 조건을 도입하는 기능 일 것입니다. 그러나 x := [0-7]^8과 같은 비 반복 숫자의 8 진수와 일치하는 흥미로운 집합을 설명 할 수도 있습니다 . 그것의 복잡성에 관해서는, 집합의 요소가 보이는지 여부를 판단하는 것이 로그보다 나쁘지 않으며, 검사 빈도는 일치하는 요소 수에서 선형이므로 ^연산자는 최악의 선형 선형 시간으로 결정할 수 있습니다.


답과 부분 집합의 순열을 생각할 힌트에 감사드립니다. 고유 반복 연산자는 고유 키로 키-값 쌍을 포착하지 않지만이 경우에는 복잡성이 동일해야합니다. 그러나 임의의 구조에 연산자를 적용하기 시작하면 CFL이 차이없이 닫히지 않기 때문에 일부 CFL이 있는 클래스 S^에는 S컨텍스트가 없을 수 있습니다. 경우는 행할 수 있어야 S정규 언어이지만, 불행하게도 당신은 주어진 CFL 일반 여부를 결정할 수 없습니다. 어쩌면 JSON과 XML의 제약을 넘어서 다른 질문을 제기 할 수도 있습니다.
야콥
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.