36장. 와일드카드 유형 사용


초록

스키마 작성자가 정의된 형식에 바인딩 요소 또는 특성을 지연하려고 하는 인스턴스가 있습니다. 이러한 경우 XML 스키마는 와일드카드 위치 소유자를 지정하기 위한 세 가지 메커니즘을 제공합니다. 모두 XML 스키마 기능을 유지하는 방식으로 Java에 매핑됩니다.

36.1. 모든 사람 사용

36.1.1. 개요

XML 스키마는 모든 요소가 복잡한 유형 정의에서 와일드카드 위치 소유자를 만드는 데 사용됩니다. XML 요소가 XML 스키마에 대해 인스턴스화되는 경우 유효한 XML 요소일 수 있습니다. 모든 요소는 인스턴스화된 XML 요소의 콘텐츠 또는 이름에 제한이 없습니다.

예를 들어 예 36.1. “모든 요소를 사용하여 정의된 XML 스키마 유형” 에 정의된 복잡한 유형이 있는 경우 예 36.2. “모든 요소가 포함된 XML 문서” 에 표시된 XML 요소 중 하나를 인스턴스화할 수 있습니다.

예 36.1. 모든 요소를 사용하여 정의된 XML 스키마 유형

<element name="FlyBoy">
  <complexType>
    <sequence>
      <any />
      <element name="rank" type="xsd:int" />
    </sequence>
  </complexType>
</element>
Copy to Clipboard Toggle word wrap

예 36.2. 모든 요소가 포함된 XML 문서

<FlyBoy>
  <learJet>CL-215</learJet>
  <rank>2</rank>
</element>
<FlyBoy>
  <viper>Mark II</viper>
  <rank>1</rank>
</element>
Copy to Clipboard Toggle word wrap

XML 스키마는 Java Object 개체 또는 Java org.w3c.dom. Cryostat 개체에 매핑 됩니다.

36.1.2. XML 스키마로 지정

시퀀스 복잡한 유형 및 선택 복잡한 유형을 정의할 때 any element를 사용할 수 있습니다. 대부분의 경우 모든 요소는 빈 요소입니다. 그러나 주석 요소를 자식으로 사용할 수 있습니다.

표 36.1. “XML 스키마의 모든 요소” 모든 요소의 특성에 대해 설명합니다.

Expand
표 36.1. XML 스키마의 모든 요소
속성설명

namespace

XML 문서에서 요소를 인스턴스화하는 데 사용할 수 있는 요소의 네임스페이스를 지정합니다. 유효한 값은 다음과 같습니다.

##any
네임스페이스의 요소를 사용할 수 있도록 지정합니다. 이는 기본값입니다.
##other
부모 요소의 네임스페이스 이외의 모든 네임스페이스의 요소를 사용할 수 있도록 지정합니다.
##local
네임스페이스가 없는 요소를 사용해야 합니다.
##targetNamespace
부모 요소의 네임스페이스의 요소를 사용해야 합니다.
공백으로 구분된 URI 목록 #\#local\#\#targetNamespace
나열된 네임스페이스의 요소를 사용할 수 있도록 지정합니다.

maxOccurs

요소의 인스턴스가 부모 요소에 나타날 수 있는 최대 횟수를 지정합니다. 기본값은 1 입니다. 요소의 인스턴스가 무제한으로 표시될 수 있도록 지정하려면 특성의 값을 바인딩되지 않은 상태로 설정할 수 있습니다.

minOccurs

요소 인스턴스가 부모 요소에 나타날 수 있는 최소 횟수를 지정합니다. 기본값은 1 입니다.

processContents

유효성을 검사해야 하는 모든 요소를 인스턴스화하는 데 사용되는 요소를 지정합니다. 유효한 값은 다음과 같습니다.

Strict
적절한 스키마에 대해 요소의 유효성을 검사하도록 지정합니다. 이는 기본값입니다.
lax
적절한 스키마에 대해 요소의 유효성을 검사하도록 지정합니다. 유효성을 검사할 수 없는 경우 오류가 발생하지 않습니다.
skip
요소의 유효성을 검사하지 않도록 지정합니다.

예 36.3. “Any Element로 정의된 complex type” 모든 요소로 정의된 복잡한 유형을 표시합니다.

예 36.3. Any Element로 정의된 complex type

<complexType name="surprisePackage">
  <sequence>
    <any processContents="lax" />
    <element name="to" type="xsd:string" />
    <element name="from" type="xsd:string" />
  </sequence>
</complexType>
Copy to Clipboard Toggle word wrap

36.1.3. Java에 매핑

XML 스키마 를 사용하면 모든 요소가 이름이 지정된 Java 속성이 생성됩니다. 속성에 getter 및 setter 메서드가 연결되어 있습니다. 결과 속성의 유형은 요소의 processContents 속성 값에 따라 달라집니다. 임의의 요소의 processContents 속성이 skip 으로 설정된 경우 요소가 org.w3c.dom.dom. Cryostat 오브젝트에 매핑 됩니다. processContents 속성의 다른 모든 값에 대해 모든 요소가 Java Object 개체에 매핑됩니다.

생성된 속성은 @ CryostatAny Cryostat 주석으로 데코레이팅됩니다. 이 주석에는 데이터를 마샬링할 때 런타임에 수행할 작업을 지시하는 선택적 lax 속성이 있습니다. 기본값은 false 로, 런타임에서 데이터를 org.w3c.dom. Cryostat 개체로 자동으로 마샬링하도록 지시합니다. laxtrue 로 설정하면 런타임에서 데이터를 CryostatB 유형으로 마샬링하도록 지시합니다. 임의의 요소의 processContents 속성이 skip 으로 설정되면 lax 속성이 기본값으로 설정됩니다. processContents 속성의 다른 모든 값에 대해 laxtrue 로 설정됩니다.

예 36.4. “모든 요소가 포함된 Java 클래스” 예 36.3. “Any Element로 정의된 complex type” 에 정의된 복잡한 유형이 Java 클래스에 매핑되는 방법을 보여줍니다.

예 36.4. 모든 요소가 포함된 Java 클래스

public class SurprisePackage {

    @XmlAnyElement(lax = true) protected Object any;
    @XmlElement(required = true)
    protected String to;
    @XmlElement(required = true)
    protected String from;

    public Object getAny() { return any; }

    public void setAny(Object value) { this.any = value; }

    public String getTo() {
        return to;
    }

    public void setTo(String value) {
        this.to = value;
    }

    public String getFrom() {
        return from;
    }

    public void setFrom(String value) {
        this.from = value;
    }

}
Copy to Clipboard Toggle word wrap

36.1.4. 마샬링

모든 요소의 Java 속성에 laxfalse 로 설정되어 있거나 속성이 지정되지 않은 경우 런타임에서 XML 데이터를 CryostatB 개체로 구문 분석하려고 하지 않습니다. 데이터는 항상 Cryostat Element 오브젝트에 저장됩니다.

모든 요소의 Java 속성에 laxtrue 로 설정된 경우 런타임은 XML 데이터를 적절한 CryostatB 객체로 마샬링하려고 시도합니다. 런타임은 다음 절차를 사용하여 적절한 Cryostat 클래스를 식별하려고 합니다.

  1. 런타임에 알려진 요소 목록에 대해 XML 요소의 요소 태그를 확인합니다. 일치하는 항목을 찾으면 런타임에서 XML 데이터를 요소의 적절한 CryostatB 클래스로 마샬링합니다.
  2. XML 요소의 xsi:type 특성을 확인합니다. 일치하는 항목을 찾으면 런타임에서 XML 요소를 해당 유형의 적절한 CryostatB 클래스로 마샬링합니다.
  3. 일치하는 항목을 찾을 수 없는 경우 XML 데이터를 Cryostat Element 개체로 마샬링합니다.

일반적으로 애플리케이션의 런타임은 계약에 포함된 스키마에서 생성된 모든 유형에 대해 알고 있습니다. 여기에는 계약의 wsdl:types 요소에 정의된 유형, 포함을 통해 계약에 추가된 모든 데이터 유형, 다른 스키마 가져오기를 통해 계약에 추가된 모든 유형이 포함됩니다. 32.4절. “런타임 Marshaller에 클래스 추가” 에 설명된 @ CryostatSeeAlso 주석을 사용하여 런타임에서 추가 유형을 인식할 수도 있습니다.

36.1.5. unmarshalling

모든 요소의 Java 속성에 laxfalse 로 설정되어 있거나 속성이 지정되지 않은 경우 런타임은 Cryostat Element 개체만 허용합니다. 다른 유형의 오브젝트를 사용하려고 하면 마샬링 오류가 발생합니다.

모든 요소의 Java 속성에 laxtrue 로 설정된 경우 런타임은 Java 데이터 유형과 해당 형식의 XML 스키마 구조 간의 내부 맵을 사용하여 이 요소에 쓸 XML 구조를 결정합니다. 런타임에서 클래스를 알고 XML 스키마 구조에 매핑할 수 있는 경우 데이터를 작성하고 xsi:type 속성을 삽입하여 요소가 포함하는 데이터 유형을 식별합니다.

런타임에서 Java 개체를 알려진 XML 스키마 구조에 매핑할 수 없는 경우 마샬링 예외가 발생합니다. 32.4절. “런타임 Marshaller에 클래스 추가” 에 설명된 @ CryostatSeeAlso 주석을 사용하여 런타임 맵에 형식을 추가할 수 있습니다.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat