36.3. 바인딩되지 않은 속성 사용


36.3.1. 개요

XML 스키마에는 복잡한 유형 정의에서 임의의 특성에 대한 위치 소유자를 남겨 둘 수 있는 메커니즘이 있습니다. 이 메커니즘을 사용하면 특성을 가질 수 있는 복잡한 유형을 정의할 수 있습니다. 예를 들어 세 가지 특성을 지정하지 않고 <robot name="epsilon" />, <robot age="10000" /> 또는 <robot type="weevil" /> 요소를 정의하는 유형을 생성할 수 있습니다. 이는 데이터의 유연성이 필요한 경우 특히 유용할 수 있습니다.

36.3.2. XML 스키마로 정의

선언되지 않은 속성은 anyAttribute 요소를 사용하여 XML 스키마에 정의됩니다. 특성 요소를 사용할 수 있는 모든 곳에서 사용할 수 있습니다. anyAttribute 요소에는 예 36.7. “선언되지 않은 속성이 있는 complex type” 에 표시된 대로 속성이 없습니다.

예 36.7. 선언되지 않은 속성이 있는 complex type

<complexType name="arbitter">
  <sequence>
    <element name="name" type="xsd:string" />
    <element name="rate" type="xsd:float" />
  </sequence>
  <anyAttribute />
</complexType>

정의된 유형인 arbitter 에는 두 개의 요소가 있으며 모든 유형의 하나의 특성을 가질 수 있습니다. 예 36.8. “Wild Card 특성으로 정의된 Cryostat의 예” 에 표시된 요소 3개 요소는 모두 복잡한 유형 arbitter 에서 생성할 수 있습니다.

예 36.8. Wild Card 특성으로 정의된 Cryostat의 예

<officer rank="12"><name>...</name><rate>...</rate></officer>
<lawyer type="divorce"><name>...</name><rate>...</rate></lawyer>
<judge><name>...</name><rate>...</rate></judge>

36.3.3. Java에 매핑

anyAttribute 요소가 포함된 복잡한 유형이 Java에 매핑되면 코드 생성기는 otherAttributes 라는 멤버를 생성된 클래스에 추가합니다. otherAttributes 유형은 java.util.Map<QName, String >이며 맵의 라이브 인스턴스를 반환하는 getter 메서드가 있습니다. getter에서 반환된 맵이 적용되므로 맵에 대한 모든 수정 사항이 자동으로 적용됩니다. 예 36.9. “선언되지 않은 속성을 사용하는 복잡한 유형 클래스” 예 36.7. “선언되지 않은 속성이 있는 complex type” 에 정의된 복잡한 유형에 대해 생성된 클래스를 표시합니다.

예 36.9. 선언되지 않은 속성을 사용하는 복잡한 유형 클래스

public class Arbitter {

    @XmlElement(required = true)
    protected String name;
    protected float rate;

    @XmlAnyAttribute private Map<QName, String> otherAttributes = new HashMap<QName, String>();

    public String getName() {
        return name;
    }

    public void setName(String value) {
        this.name = value;
    }

    public float getRate() {
        return rate;
    }

    public void setRate(float value) {
        this.rate = value;
    }

    public Map<QName, String> getOtherAttributes() { return otherAttributes; }

}

36.3.4. 선언되지 않은 속성 작업

생성된 클래스의 otherAttributes 멤버는 Map 오브젝트로 채워져 있어야 합니다. 맵은 QNames 를 사용하여 키가 지정됩니다. 맵을 가져온 후 오브젝트에 설정된 모든 속성에 액세스하고 오브젝트에서 새 속성을 설정할 수 있습니다.

예 36.10. “선언되지 않은 속성 작업” 선언되지 않은 특성으로 작업하기 위한 샘플 코드를 보여줍니다.

예 36.10. 선언되지 않은 속성 작업

Arbitter judge = new Arbitter();
Map<QName, String> otherAtts = judge.getOtherAttributes();

QName at1 = new QName("test.apache.org", "house");
QName at2 = new QName("test.apache.org", "veteran");

otherAtts.put(at1, "Cape");
otherAtts.put(at2, "false");

String vetStatus = otherAtts.get(at2);

예 36.10. “선언되지 않은 속성 작업” 의 코드는 다음을 수행합니다.

선언되지 않은 속성이 포함된 맵을 가져옵니다.

특성을 사용할 QNames를 생성합니다.

속성 값을 맵으로 설정합니다.

특성 중 하나에 대한 값을 검색합니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.