Σ를 알파벳 이라고 부르는 비어 있지 않은 유한 한 기호 집합이라고하자 . 그런 다음 Σ *는 Σ에서 0 개 이상의 기호를 연결하여 형성 할 수있는 무한한 유한 단어 집합입니다. 잘 정의 된 부분 집합 L ⊆ Σ *는 언어 입니다.
이것을 XML에 적용하자. 알파벳은 유니 코드 문자 집합 U 이며 비어 있지 않고 유한합니다. 0 개 이상의 유니 코드 문자로 구성된 모든 연결이 올바른 형식의 XML 문서 인 것은 아닙니다 (예 : 문자열).
<tag> soup &; not <//good>
분명히 아닙니다. 올바른 형식의 XML 문서 를 구성 하는 하위 집합 XML ⊂ U * 는 결정할 수 있습니다 (또는 "재귀 적"). 단어 w ∈ U * 를 입력으로 사용 하고 한정된 시간 후에 w ∈ XML 이면 1을 출력 하고 그렇지 않으면 0을 출력 하는 기계 (알고리즘 또는 컴퓨터 프로그램)가 있습니다. 이러한 알고리즘은 모든 XML 처리 소프트웨어의 하위 루틴입니다. 모든 언어가 결정 가능한 것은 아닙니다. 예를 들어, 유한 한 시간 안에 종료되는 유효한 C 프로그램 세트는 그렇지 않습니다 ( 정지 문제 라고 함).). 새로운 언어를 디자인 할 때, 결정을 내리는 것이 가능한 한 강력해야하는지 또는 표현력이 결정 성을 더 잘 제한 할 것인지 결정해야합니다.
일부 언어는 언어 를 생성 한다고 하는 문법 을 통해 정의 할 수 있습니다 . 문법은
- 유한 리터럴 세트 ( 터미널 심볼 이라고도 함 )
- 문법 의 분리 된 유한 변수 세트 ( 비 터미널 기호 라고도 함 )
- 변수 세트에서 가져온 고유 한 시작 기호
- 특정 종류의 교체를 허용 하는 유한 규칙 세트 (소위 프로덕션 )
리터럴로만 구성되고 시작 기호로 시작한 다음 주어진 규칙을 적용하여 파생되는 모든 단어는 문법으로 생성 된 언어에 속합니다.
예를 들어 다음 문법 (비공식 표기법)을 사용하면 정확히 10 진수 표기법으로 정수를 도출 할 수 있습니다.
- 문법의 리터럴은 숫자입니다
1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
,와 0
.
- 변수는 기호 S 및 D 입니다.
- S 는 시작 기호입니다.
- 변수 S의 발생은 대체 될 수 있습니다
- 문자 그대로
0
또는
0
변수 D 이외의 다른 리터럴이 있습니다.
- 변수 D의 발생은 대체 될 수 있습니다
- 리터럴 뒤에 변수 D 의 다른 인스턴스가옵니다. 또는
- 빈 문자열로.
우리가 도출하는 방법은 다음과 같습니다 42
.
S — (규칙 4, 2 차 변형 적용 ) → 4
D — (규칙 5, 1 차 변형 적용 ) → 42
D — (규칙 5, 2 차 변형 적용 ) → 42
.
문법에서 얼마나 정교한 규칙을 허용 하느냐에 따라 문법으로 주어진 단어가 실제로 생성 될 수 있음을 증명하기 위해 다르게 정교한 기계가 필요합니다. 위에 주어진 예제 는 가장 단순하고 가장 강력한 정규 문법입니다. 다음으로 강력한 문법 클래스를 컨텍스트 프리 라고 합니다. 이 문법은 확인하기 매우 간단합니다. XML (내가 모르는 모호한 기능을 간과하지 않는 한)은 문맥이없는 문법으로 설명 할 수 있습니다. 문법의 분류는 Chomsky Hierarchy of grammars (따라서 언어)를 형성합니다. 문법으로 설명 할 수있는 모든 언어는 최소한 반 결정 가능(또는 "재귀 적으로 열거 가능"). 즉, 실제로 언어에 속하는 단어가 주어지면 유한 시간 내에 문법으로 생성 할 수 있다는 증거를 도출하고 잘못된 증거를 출력하지 않는 기계가 있습니다. 이러한 기계를 검증기 라고합니다 . 실제로 언어에 속하지 않는 단어가 주어지면 기계가 멈추지 않을 수 있습니다. 우리는 유한 한 시간 내에 무효 한 프로그램을 거부 할 수있는 장점을 위해 덜 강력한 문법으로 프로그래밍 언어를 설명하기를 원합니다.
스키마 는 XML에 추가 된 것으로서 올바른 형식의 문서 세트를 구체화 할 수 있습니다. 특정 스키마를 따르는 올바른 형식의 문서 를 해당 스키마에 따라 유효하다고합니다 . 예를 들어, 문자열
<?xml version="1.0" encoding="utf-8" ?>
<root>all evil</root>
올바른 형식의 XML 문서이지만 유효한 XHTML 문서는 아닙니다. XHTML , SVG , XSLT 및 그 밖의 것에는 스키마가 있습니다 . 모든 입력에 대해 유한 한 단계 후에 정지되도록 보장하는 알고리즘으로 스키마 유효성 검사를 수행 할 수도 있습니다. 이러한 프로그램을 유효성 검사기 또는 유효성 검사 파서 라고합니다 . 스키마는 문법을 공식적으로 정의하는 방법 인 소위 스키마 정의 언어로 정의됩니다 . XSD 는 XML의 공식 스키마 정의 언어이며 XML 자체입니다. RELAX NG 는 XSD에 대한보다 우아하고 훨씬 단순하고 약간 덜 강력한 대안입니다.
고유 한 스키마를 정의 할 수 있으므로 XML을 확장 가능한 언어 라고하며 , 이는 "XML"에서 "X"의 원점입니다.
컴퓨터 프로그램에 대한 설명으로 XML 문서에 해석을 제공하는 규칙 세트를 정의 할 수 있습니다. 앞에서 언급 한 XSLT는 XML로 작성된 프로그래밍 언어의 예입니다. 더 일반적으로, 원하는 경우 거의 모든 프로그래밍 언어의 추상 구문 트리를 XML로 자연스럽게 직렬화 할 수 있습니다.