SDXF
SDXFSDXF(Structured Data eXchange Format)는 RFC 3072에 의해 정의된 데이터 직렬화 형식이다.서로 다른 유형의 임의 구조화된 데이터를 임의의 컴퓨터 간 교환을 위해 하나의 파일로 조립할 수 있도록 한다.
데이터를 임의로 자기 설명 형식으로 직렬화하는 기능은 XML을 연상시키지만, SDXF는 텍스트 형식(XML로서)이 아니다 — SDXF는 텍스트 편집기와 호환되지 않는다.SDXF를 사용하여 인코딩한 기준점(초기 및 복합체)의 최대 길이는 16777215바이트(16MB 미만)이다.
기술 구조 형식
SDXF 데이터는 임의 수준의 구조 깊이를 표현할 수 있다.데이터 요소는 자체 문서화로서 메타데이터(숫자, 문자 문자열 또는 구조)를 데이터 요소로 인코딩하는 것을 의미한다.이 형식의 디자인은 간단하고 투명하다: 컴퓨터 프로그램은 잘 정의된 기능의 도움으로 SDXF 데이터에 접근하여 프로그래머들이 정확한 데이터 레이아웃을 배우지 못하게 한다.
이름에서 "교환"이라는 단어는 다른 종류의 투명성을 반영한다: SDXF 기능은 데이터의 컴퓨터 아키텍처 독립적 변환을 제공한다.일련화는 추가 조치 없이 컴퓨터 간(직접 네트워크, 파일 전송 또는 CD를 통해) 교환할 수 있다.SDXF는 수신측 핸들 구조 적응에서 기능한다.
구조화된 데이터는 텍스트 문자열보다 더 복잡한 패턴을 예측하는 데이터다.[1]
예
상업적인 예: 두 회사가 디지털 송장을 교환하기를 원한다.송장에는 다음과 같은 계층적 중첩 구조가 있다.
INVOICE │ ├─ INVOICE_NO ├─ DATE ├─ ADDRESS_SENDER │ ├─ NAME │ ├─ NAME │ ├─ STREET │ ├─ ZIP │ ├─ CITY │ └─ COUNTRY ├─ ADDRESS_RECIPIENT │ ├─ NAME │ ├─ NAME │ ├─ STREET │ ├─ ZIP │ ├─ CITY │ └─ COUNTRY ├─ INVOICE_SUM ├─ SINGLE_ITEMS │ ├─ SINGLE_ITEM │ │ ├─ QUANTITY │ │ ├─ ITEM_NUMBER │ │ ├─ ITEM_TEXT │ │- CARGENT │ -- SUM -- -- ...├- 조건...
구조
기본 원소는 덩어리다.SDXF 연재 자체는 하나의 청크다.청크는 일련의 작은 청크로 구성될 수 있다.청크는 6바이트의 헤더 접두사 뒤에 데이터로 구성된다.헤더에 청크 식별자가 2바이트 이진수(Chunk_)로 포함되어 있음ID), 청크 길이 및 유형.압축, 암호화 등에 대한 추가 정보를 포함할 수 있다.
청크 유형은 데이터가 텍스트(문자 문자열), 이진수(integer 또는 floating point)로 구성되는지 또는 청크가 다른 청크의 합성어로 구성되는지 여부를 나타낸다.
구조화된 청크는 프로그래머가 위 송장과 같은 계층 구조물을 다음과 같이 SDXF 구조로 포장할 수 있게 해준다.모든 명명된 용어(INVOICE_NO, DATE, ADDE_SENDER 등)에는 1 ~ 65535 범위(부호 없는 2바이트 이진 정수)의 고유 번호가 부여된다.맨 위/맨 위 청크는 ID 송장(관련 숫자 청크)으로 구성된다.ID) 수준 1의 구조화된 청크로.이 송장 청크는 레벨 2 이상의 다른 청크로 채워진다.인보이스_NO, 날짜, 주소_SENDER, 주소_RECIPIENT, 인보이스_SUM, 싱글_ITEM, 조건. 일부 레벨 2 청크는 두 주소와 싱글_ITEM에 대해 차례로 구조화된다.
정확한 설명은 RFC의 2페이지 또는 여기서 대체를 참조하십시오.[2]
SDXF는 프로그래머가 컴팩트한 기능 세트로 SDXF 구조 작업을 할 수 있게 한다.그 중 몇 가지는 다음과 같다.
청크를 읽으려면 다음 기능을 사용해야 한다.
- 초기화하다
- 매개 변수 구조를 초기화하고 기존 청크에 연결하려면 다음과 같이 하십시오.
- 입장하다
- 구조화된 청크로 들어가려면 이 구조의 첫 번째 청크를 처리할 준비가 된다.
- 떠나다
- 현재 구조를 떠나려면.이 구조는 이미 최신이다.
- 다음에
- 존재하는 경우 다음 청크로 이동(그렇지 않으면 현재 구조에서 제외됨)
- 발췌하다
- 현재 청크에서 프로그램 변수로 데이터를 전송(수정)하려면
- 선발하다
- 지정된 청크 ID로 다음 청크를 검색하여 최신 상태로 만들려면 다음과 같이 하십시오.
청크를 빌드하려면 다음 기능을 사용해야 한다.
- 초기화하다
- 매개 변수 구조를 초기화하고 빈 출력 버퍼에 연결하여 새 청크를 생성하려면 다음과 같이 하십시오.
- 만들다
- 새 청크를 만들어 현재 기존 구조에 추가하십시오(있는 경우).
- 덧셈을
- SDXF-구조에 전체 청크를 추가하십시오.
- 떠나다
- 현재 구조를 떠나려면.이 구조는 이미 최신이다.
다음 유사 코드는 송장을 생성한다.
초기화하다 (sdx, 완충하다=1000); // SDXF 매개변수 구조 sdx 초기화 만들다 (sdx, 아이디=송장, 데이터타입=구조화됨); // 주 구조물의 시작 만들다 (sdx, 아이디=인보이스_NO, 데이터타입=숫자, 가치를 매기다=123456); // 기본 청크 생성 만들다 (sdx, 아이디=날짜, 데이터타입=CHAR, 가치를 매기다="2005-06-17"); // 다시 한 번 만들다 (sdx, 아이디=주소_Sender, 데이터타입=구조화됨); // 하부 구조 만들다 (sdx, 아이디=이름, 데이터타입=CHAR, 가치를 매기다="피터 썸씽"); // 요소.이 하부 구조 내부의 청크 ... 만들다 (sdx, 아이디= 컨트리, 데이터타입=CHAR, 가치를 매기다="프랑스"); // 이 하부 구조 내부의 마지막 부분 떠나다; // 하부 구조 닫기 주소_Sender ... 떠나다; // 하부구조 송장 마감
송장 구조를 추출하기 위한 유사 코드는 다음과 같이 보일 수 있다.
초기화하다 (sdx, 컨테이너=포인터 로 a의 SDXF-구조화하다); // SDXF 매개변수 구조 sdx 초기화 입장하다 (sdx); // 송장 구조에 가입하십시오. // 하는 동안에 (sdx.rc == SDX_RC_ok) { 바꾸다 (sdx. 청크_ID) { 케이스 인보이스_NO: 발췌하다 (sdx); 하지 않다 = sdx.가치를 매기다; // 추출 함수는 매개 변수 필드 '값'에 정수 값을 넣는다. 부숴뜨리다; // 케이스 날짜: 발췌하다 (sdx); 층층적인 (날짜가 맞지 않다, sdx.자료); // sdx.data는 추출된 문자열에 대한 포인터임 부숴뜨리다; // 케이스 주소_Sender: 입장하다 (sdx); // 주소가 구조화된 청크이기 때문에 'Enter'를 사용한다. 하다 하는 동안에 (sdx.rc == SDX_RC_ok) // 내부 루프 ... 부숴뜨리다; ... } }
SDXF는 가독성을 위해 설계되거나 텍스트 편집기에 의해 수정되도록 설계되지 않았다.관련 편집 가능한 구조는 SSDEF이다.
참고 항목
참조
- ^ 여기서 "구조화"는 구조화된 프로그래밍에서와 같은 의미로 사용된다고 주장할 수 있다. 마치 (엄격한) 구조화된 프로그램에 gotos가 없는 것처럼 SDXF에는 포인터/참고가 없다.그러나 이런 식으로 이름이 생겨날 필요는 없다.
- ^ "SDXF - 2. Description of the SDXF Format". Pinpi.com. Retrieved 2013-09-10.
- ^ "6.3 The Project PRNT: a complete example". PINPI. Retrieved 2013-09-10.