MongoDB에 XML을 로딩하는 중

XML을 MongoDB로 데이터를 내보내야 할 많은 상황이 있을 수 있습니다.

MongoDB에서 사용되는 XML 및 JSON(B) 형식이 많은 공통점을 가지고 있지만, 서로 교환할 수 없는 몇 가지 차이점이 있습니다.

따라서 XML에서 MongoDB로 데이터를 내보내는 작업에 앞서 다음을 수행해야 합니다:

  1. 자체 XML 구문 분석 스크립트 작성;
  2. ETL 도구 사용.

현대적인 언어 모델은 Python과 같은 언어로 구문 분석 스크립트를 잘 작성할 수 있지만, 이러한 스크립트는 통일되지 않을 것입니다. 각 파일 유형에 대해 현대적인 언어 모델은 별도의 스크립트를 생성합니다. 여러 유형의 XML이 있는 경우, 여러 구문 분석 스크립트를 유지하는 데 이미 상당한 문제가 발생합니다.

위 문제는 일반적으로 전문 ETL 도구를 사용하여 해결됩니다. 이 글에서는 SmartXML이라는 ETL 도구를 살펴보겠습니다. SmartXML은 XML을 관계형 표현으로 변환하는 것도 지원하지만, 여기서는 XML을 MongoDB로 업로드하는 과정만 살펴볼 것입니다.

실제 XML은 매우 크고 복잡할 수 있습니다. 본 기사는 입문용 기사이므로 다음과 같은 상황을 해석할 것입니다:

  1. 모든 XML이 동일한 구조를 가지고 있는 경우;
  2. XML의 논리적 모델은 MongoDB의 저장 모델과 동일합니다;
  3. 추출된 필드는 복잡한 처리가 필요하지 않습니다;

그러한 경우는 나중에 다루겠지만, 우선 간단한 예제를 살펴보겠습니다:

XML

 

이 예제에서는 전체 XML이 아닌 실제 목적에 맞는 필드만 MongoDB에 업로드할 것입니다.

새 프로젝트 만들기

GUI에서 새 프로젝트를 만드는 것이 권장됩니다. 이렇게 하면 필요한 폴더 구조와 파싱 규칙이 자동으로 생성됩니다. 프로젝트 구조에 대한 전체 설명은 공식 문서에서 확인할 수 있습니다.

이 기사에 설명된 모든 매개변수는 그래픽 모드에서 구성할 수 있지만, 명확성을 위해 텍스트 표현에 집중하겠습니다.

프로젝트 설정이 포함된 config.txt 파일 외에도 배치 작업을 위한 job.txt, 프로젝트 자체는 다음으로 구성됩니다:

  1. 프로젝트 폴더 templates/data-templates.red에 위치한 중간 내부 SmartDOM 뷰의 템플릿.
  2. SmartDOM 자체의 처리 및 변환 규칙, rules 폴더에 위치합니다.

data-templates.red의 구조를 살펴보겠습니다:

Plain Text

 

참고

  1. 이름 sample은 카테고리의 이름이며, 중요하지 않습니다.
  2. marketing_data는 하위 카테고리의 이름입니다. 최소한 하나의 코드 하위 카테고리(하위 유형)가 필요합니다.
  3. 중간 뷰 이름은 XML 태그 이름과 정확히 일치할 필요가 없습니다. 이 예제에서는 의도적으로 snake_case 스타일을 사용했습니다.

규칙 추출

규칙은 프로젝트 폴더의 rules 디렉토리에 위치해 있습니다.

MongoDB와 작업할 때 우리는 두 가지 규칙에만 관심을 가질 것입니다:

  1. tags-matching-rules.red — XML 태그 트리와 SmartDOM 간의 일치를 설정합니다.
  2. grow-rules.red — SmartDOM 노드와 실제 XML 노드 간의 관계를 설명합니다.
Plain Text

 

핵심은 SmartDOM에서의 노드 이름이며, 값은 실제 XML 파일에서의 노드 철자 변형을 포함하는 배열이 될 것입니다. 우리의 예제에서는 이러한 이름이 동일합니다.

무시된 태그

위의 예제에서 MongoDB에 불필요한 데이터를 로드하지 않기 위해, 우리는 ignores 폴더에 섹션마다 하나씩 파일을 생성합니다. 이 파일들은 추출 중에 건너뛸 태그 목록을 포함합니다. 우리의 예제에서는 sample.txt 파일이 포함됩니다:

Plain Text

 

결과적으로 형태 분석 후, 중간 표현은 다음 형태를 취합니다:

Plain Text

 

형태 분석 후에는 처음 발견된 노드의 데이터만 포함된 최소한의 표현이 표시됩니다.

생성될 JSON 파일은 다음과 같습니다:

JSON

 

MongoDB 연결 구성

MongoDB는 직접적인 HTTP 데이터 삽입을 지원하지 않으므로 중개 서비스가 필요합니다.

의존성을 설치해 봅시다: pip install flask pymongo.

서비스 자체:

Python

 

config.txt 파일에 MongoDB 연결 설정을 설정할 것입니다 ( nosql-url 참조):

Plain Text

 

MongoDB는 데이터베이스 및 컬렉션이 없는 경우 동일한 이름으로 자동으로 생성됩니다. 그러나 이 동작은 오류를 발생시킬 수 있으며, 기본적으로 비활성화하는 것이 좋습니다.

서비스 자체를 실행해 봅시다:

Python

 

다음파싱을 클릭하고그런 다음 JSON을 NoSQL로 전송을 클릭하세요.


모든 편리한 방법으로 MongoDB 콘솔에 연결하고 다음 명령을 실행하십시오:

Plain Text

 

결과는 다음과 같아야 합니다:

JSON

 

마무리

이 예에서는 어떻게 코드를 작성하지 않고도 XML 파일을 MongoDB에 자동으로 업로드할 수 있는지를 볼 수 있었습니다. 예제는 하나의 파일만을 고려하지만, 하나의 프로젝트 내에서 많은 유형과 하위 유형의 다른 구조를 가진 파일을 다루고, 유형 변환과 실시간으로 필드 값을 처리하기 위해 외부 서비스를 사용하는 등의 복잡한 조작을 수행할 수 있습니다. 이는 XML에서 데이터를 추출하는 것 뿐만 아니라, 일부 값들을 외부 API를 통해 처리하고, 대규모 언어 모델을 사용하는 것도 가능하게 합니다.

Source:
https://dzone.com/articles/loading-xml-into-mongodb