MYMONDAY.ai
서비스스튜디오도구데이터·포맷73CSS 생성기19색상·이미지10인코딩·보안10웹·SEO11개발·데브옵스10파일·내보내기18계산기6가이드

XML XSD 생성기

예제 XML 문서에서 요소 구조, 출현 횟수, 속성, 단순 타입을 모든 출현을 합쳐 추론한 XSD를 만듭니다.

  • 브라우저에서 처리
  • 가입 없음
  • 무료

도구 작업 공간

예제

옵션

모든 샘플에 있는 속성은 use="required", 요소는 minOccurs="0" 없이 출력합니다.

xs:boolean, xs:integer, xs:decimal, xs:date, xs:dateTime을 감지하고 나머지는 xs:string입니다.

XML 입력

21줄491byte

결과

⌘/Ctrl + Enter로 복사
결과 · schema.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="order">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="customer">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="name" type="xs:string"/>
              <xs:element name="email" type="xs:string"/>
            </xs:sequence>
            <xs:attribute name="id" type="xs:integer" use="required"/>
            <xs:attribute name="vip" type="xs:boolean" use="required"/>
          </xs:complexType>
        </xs:element>
        <xs:element name="items">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="item" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="name" type="xs:string"/>
                    <xs:element name="price" type="xs:decimal"/>
                  </xs:sequence>
                  <xs:attribute name="sku" type="xs:string" use="required"/>
                  <xs:attribute name="qty" type="xs:integer" use="required"/>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="total" type="xs:decimal"/>
        <xs:element name="shipped_at" type="xs:dateTime"/>
        <xs:element name="tracking" type="xs:string"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:integer" use="required"/>
      <xs:attribute name="status" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>
</xs:schema>
요소11
크기1.6kB

예제 문서를 읽어 그것을 설명하는 XML 스키마를 써 주는 XML XSD 생성기로, API 응답, 설정 파일, 피드의 출발점이 될 스키마를 빠르게 얻을 수 있습니다. XML은 페이지 안의 엄격한 XML 1.0 파서가 읽고 스키마는 입력하는 동안 갱신됩니다. 문서가 올바르지 않으면 대신 줄과 열로 오류가 표시됩니다.

핵심은 병합입니다. 같은 위치의 요소는 모든 출현을 합치므로 반복되는 <item>은 모든 속성과 자식의 합집합이 되고, 일부 출현에 없는 것은 선택 항목이 됩니다. 이전 버전은 첫 번째 출현만 봤습니다. 출현 횟수가 카디널리티를 정합니다. 일부 부모에 없는 요소에는 minOccurs="0", 반복되는 요소에는 maxOccurs="unbounded"가 붙습니다.

엄격함은 두 옵션으로 조절합니다. 항상 있는 항목을 필수로 표시, 텍스트에서 단순 타입 추론입니다. 최대 20 MiB를 브라우저에서 로컬로 처리하며 업로드하지 않습니다. 스키마를 복사하거나 schema.xsd로 내려받으세요. 결과는 샘플에서 추론한 것이므로 완성된 계약이 아니라 검토할 초안으로 다루세요.

사용 방법

  1. 대표성 있는 샘플 붙여넣기

    모든 요소와 속성이 한 번 이상 나오고, 가능하면 반복 요소가 여러 개인 문서를 쓰세요. 스키마는 샘플에 들어 있는 것만 설명할 수 있습니다.

  2. 항상 있는 항목을 필수로 표시

    켜면 모든 출현에 있는 속성에 use="required"가 붙고 모든 부모에 있는 요소에는 minOccurs="0"이 없습니다. 끄면 모든 것이 선택 항목이 됩니다.

  3. 텍스트에서 단순 타입 추론

    켜면 모든 샘플 값을 보고 xs:boolean, xs:integer, xs:decimal, xs:double, xs:date, xs:dateTime, xs:string 중 하나를 고릅니다. 끄면 모든 단순 값이 xs:string입니다.

  4. 경고 확인

    문서가 네임스페이스를 둘 이상 쓰면 안내와 함께 루트 네임스페이스 밖의 요소를 대신하는 xs:any namespace="##other" 와일드카드를 확인하세요.

  5. 검토 후 복사·다운로드

    출현 표시와 타입을 데이터에 대해 아는 내용과 맞춰 본 뒤 XSD를 복사하거나 schema.xsd로 내려받으세요.

작동 원리

스키마가 만들어지는 방식

XSD는 W3C의 XML 스키마 언어입니다. 생성기는 루트에 전역 xs:element를, 자식이나 속성이 있는 요소마다 익명 xs:complexType을, 텍스트만 가진 요소에는 단순한 type= 속성을 씁니다. 모든 인스턴스가 자식을 일관된 순서로 나열하면 자식은 xs:sequence에 들어갑니다. <a/><b/><a/>처럼 자식이 번갈아 나오면 sequence가 샘플을 거부하므로 xs:choice minOccurs="0" maxOccurs="unbounded" 그룹이 됩니다.

텍스트와 속성은 있고 자식은 없는 요소는 추론한 기본 타입의 xs:extension을 가진 xs:simpleContent를 쓰는데, XSD에서 타입 값에 속성을 붙이는 방법입니다. 텍스트가 자식 요소 옆에 있는 요소에는 mixed="true"가 붙습니다. 속성 선언은 콘텐츠 모델 뒤에 옵니다. xmlns 같은 선언은 속성이 아니라 네임스페이스 장치이므로 xs:attribute로 쓰이지 않습니다.

출현 횟수와 타입 추론

각 자식 이름마다 부모 인스턴스별 출현 횟수를 셉니다. 최솟값이 0이면 minOccurs="0", 최댓값이 1을 넘으면 maxOccurs="unbounded"가 붙고, 정확히 한 번이라는 기본값은 쓰지 않습니다. 속성은 모든 인스턴스에 있을 때만 필수입니다.

타입은 요소나 속성의 모든 값에서 추론합니다. 정수는 xs:integer이지만 007처럼 앞자리 0이 있으면 식별자로 보고 제외하며, 소수부가 있으면 xs:decimal, 지수가 있으면 xs:double, true·false는 xs:boolean입니다. 2026-03-14는 xs:date, ISO 타임스탬프는 xs:dateTime입니다. 값들이 서로 다르면 xs:string으로 돌아가며, 정수와 소수가 섞이면 예외로 xs:decimal이 됩니다.

샘플 값추론된 타입
1042, 7xs:integer
24.50, 3xs:decimal
1e3xs:double
true, falsexs:boolean
2026-03-14xs:date
2026-03-14T09:30:00Zxs:dateTime
007, 5xs:string

네임스페이스

루트 요소가 네임스페이스에 속하면 그 URI가 targetNamespace가 되고 스키마에 elementFormDefault="qualified"가 붙습니다. 루트 네임스페이스의 요소는 로컬 이름으로 선언합니다. media:thumbnail처럼 다른 네임스페이스의 요소는 접두사를 뺀 선언으로 바꾸지 않고 xs:any namespace="##other" processContents="skip"로 표현합니다. 이 와일드카드는 외부 요소를 루트 네임스페이스 소속으로 잘못 선언하지 않고 받아들입니다. XML 파서는 모든 접두사가 해당 요소나 조상에서 xmlns:prefix로 선언되어 있어야 하며, 미리 정의된 xml 접두사만 선언 없이 쓸 수 있습니다.

실제 예시

반복 항목과 타입이 있는 주문
입력
<order id="1042" paid="true"><customer>Ada</customer><item sku="A1" qty="2">Pen</item><item sku="B7">Ink</item><total>24.50</total><date>2026-03-14</date></order>
출력
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="order">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="customer" type="xs:string"/>
        <xs:element name="item" maxOccurs="unbounded">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:string">
                <xs:attribute name="sku" type="xs:string" use="required"/>
                <xs:attribute name="qty" type="xs:integer"/>
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
        <xs:element name="total" type="xs:decimal"/>
        <xs:element name="date" type="xs:date"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:integer" use="required"/>
      <xs:attribute name="paid" type="xs:boolean" use="required"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

item 요소 둘이 병합됩니다. sku는 둘 다에 있어 필수이고, qty는 하나에만 있어 선택이며, 반복되므로 maxOccurs가 unbounded입니다.

루트 네임스페이스와 두 번째 네임스페이스
입력
<feed xmlns="http://example.com/feed" xmlns:media="http://example.com/media"><title>T</title><media:thumbnail url="a"/></feed>
출력
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.com/feed" elementFormDefault="qualified">
  <xs:element name="feed">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="title" type="xs:string"/>
        <xs:any namespace="##other" processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

문서가 네임스페이스 2개를 쓴다는 경고가 나옵니다. xmlns 선언은 속성이 아니며 외부 요소 media:thumbnail은 ##other 와일드카드가 됩니다.

혼합 콘텐츠와 번갈아 나오는 자식
입력
<doc><p>Hello <b>bold</b> world</p></doc>
출력
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="doc">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="p">
          <xs:complexType mixed="true">
            <xs:sequence>
              <xs:element name="b" type="xs:string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

b 옆의 텍스트 때문에 p의 타입이 mixed가 됩니다. <r><a>1</a><b>2</b><a>3</a></r>는 a와 b를 xs:integer로 담은 minOccurs 0, maxOccurs unbounded인 xs:choice가 됩니다.

자주 하는 실수

  • 출현이 하나뿐인 샘플은 정확히 하나로 보임

    샘플에 <item>이 하나뿐이면 스키마는 정확히 하나로 선언합니다. 생성기가 반복과 변형을 볼 수 있도록 여러 개를 넣고 일부는 선택 부분을 빼 두세요.

  • 타입은 샘플에서만 나옴

    우연히 1, 2, 3이 든 필드는 실제로는 A7도 될 수 있는 코드여도 xs:integer가 됩니다. 타입 추론을 끄거나 실제 데이터가 담을 수 있는 타입으로 고치세요.

  • 필수 여부도 샘플을 따름

    항상 있는 항목을 필수로 표시를 켜면 모든 출현에 있는 것은 필수가 됩니다. 샘플이 작으면 현실보다 엄격한 스키마가 되므로, 느슨한 출발점이 필요하면 옵션을 끄세요.

  • 외부 네임스페이스는 와일드카드로 처리됨

    루트 네임스페이스만 targetNamespace가 됩니다. 다른 네임스페이스의 요소는 검증을 건너뛰는 xs:any namespace="##other" 와일드카드 하나로 받아들이므로 세부 구조는 설명하지 않습니다. 그 요소도 검증해야 한다면 스키마를 import해 직접 연결하세요.

  • 열거, 패턴, 제한은 없음

    생성기는 구조와 기본 타입만 추론합니다. xs:enumeration, xs:pattern, xs:maxLength 같은 facet과 키 제약은 직접 추가해야 합니다.

자주 묻는 질문

반복되는 요소를 병합하나요?

네. 같은 위치의 모든 출현을 합치므로 모든 출현의 속성과 자식이 포함되고, 어딘가에 없는 것은 선택 항목이 됩니다.

같은 요소의 속성과 텍스트는 어떻게 선언되나요?

xs:simpleContent와, 텍스트에서 추론한 타입을 base로 하는 xs:extension을 쓰고 속성은 extension 안에 선언합니다.

항상 있는 항목을 필수로 표시는 무엇을 하나요?

모든 출현에 있는 속성에 use="required"를 쓰고 모든 부모에 있는 요소에서는 minOccurs="0"을 생략합니다. 끄면 모든 요소에 minOccurs="0"이 붙고 필수 속성은 없습니다.

어떤 단순 타입을 감지하나요?

xs:boolean, xs:integer, xs:decimal, xs:double, xs:date, xs:dateTime, xs:string입니다.

XML을 스키마로 검증해 주나요?

아니요. 샘플에서 스키마를 생성할 뿐입니다. 문서 검증은 xmllint나 사용하는 언어의 스키마 검증기 같은 XSD 지원 도구로 하세요.

XML이 업로드되나요?

아니요. 파싱과 생성이 브라우저 탭 안에서 실행되며 최대 20 MiB까지 처리합니다.

마지막 업데이트: