예제 | 설명 |
---|---|
anyElement | XML 스키마 스펙의 요소를 사용하여 XML 문서의 컨텐츠 모델을 확장하는 방법에 대해 설명하는 고급 예제입니다. |
PurchaseOrder.xml 편집 | XML 파일(PurchaseOrder.xml)을 편집할 때 XML 스키마 파일(PurchaseOrder.xsd)을 사용하여 편집 지원을 제공하는 방법을 보여줍니다. international 디렉토리는 파생된 유형을 빌드하는 방법 및 XML 인스턴스 문서에서 xsi:type 속성을 사용하는 방법을 설명합니다. report.xsd 예제는 여러 네임스페이스의 다중 스키마에 대해 작업하는 방법을 보여줍니다. |
대체 그룹 사용 | XML 스키마를 사용하여 이름 지정된 요소 그룹이 다른 요소로 대체되도록 허용하는 방법을 보여줍니다. |
##any 네임스페이스 사용
anyNamespace 디렉토리의 Book.xsd 스키마에는 복합 유형 BookType이 있습니다. BookType의 컨텐츠는 제목, 저자, ISBN 및 선택적으로 any 요소가 표시하는 대로 잘 구성된 XML입니다. <any namespace="##any" minOccurs="0" maxOccurs="unbounded"/>
즉, 인스턴스 문서에서 BookType 정의를 확장하여 임의의 XML 요소를 삽입할 수 있습니다. 이 샘플에는 Publisher.xsd와 Reviewer.xsd의 두 스키마가 있습니다. 이를 사용하여 인스턴스 문서에서 BookType의 정의를 확장합니다. 이 두 스키마는 다른 네임스페이스에 있습니다.
특정 네임스페이스 사용
specifiedNamespace 디렉토리의 Book.xsd 스키마에는 복합 유형 BookType이 있습니다. BookType의 컨텐츠는 제목, 저자, ISBN 및 선택적으로 any 요소가 표시하는 대로 네임스페이스 http://www.wesley.com에 속하는 잘 구성된 XML입니다. <any namespace="http://www.wesley.com" minOccurs="0" maxOccurs="unbounded"/>
즉, 인스턴스 문서에서 네임스페이스 http://www.wesley.com에 속하도록 제공된 BookType 정의를 확장하여 임의의 XML 요소를 삽입할 수 있습니다. 이 예제에서 Reviewer.xsd 파일은 이 네임스페이스에 속합니다.
Book.xml은 xsi:schemaLocation 속성을 통해 Book.xsd와 Reviewer.xsd 둘 다에 연관됩니다. 서적에 대한 검토 주석을 제공하는 reviewer 요소로 BookType을 확장하는 방법을 보여줍니다.
Book.xml에 대해 XML 편집기의 디자인 보기에서 rev:reviewer 요소를 선택하십시오. 팝업 메뉴에서
을 선택하여 reviewer에 대한 주석을 추가하십시오. 유효성 검증을 실행하여 문서가 유효한지 확인하십시오.any 요소가 있는 스키마에서 인스턴스 생성
새 XML 마법사는 올바른 컨텐츠를 생성하는 데 필요한 스키마 위치를 입력하도록 프롬프트했습니다. 위의 단계를 반복하면서 'http://www.wesley.com' 네임스페이스의 스키마 위치를 입력하지 않으면 company 요소 대신 ANY-ELEMENT 플레이스홀더가 생성됩니다. 원하는 요소를 포함하도록 ANY-ELEMENT를 수정해야 합니다.
XML 문서에 네임스페이스 추가
PurchaseOrder.xsd 파일은 PurchaseOrder.xml 파일의 컨텐츠를 정의하는 규칙을 제공합니다. 이 파일은 xsi:schemaLocation 속성을 통해 PurchaseOrder.xml 파일에 연관됩니다.
발생 제한조건
<element name="shipDate" type="date" minOccurs="0"/>
PurchaseOrder.xml에 대해 XML 편집기의 디자인 보기에서 items 요소 아래의 첫 번째 항목을 선택하십시오. 마우스 오른쪽 단추로 클릭하고 하위 추가 팝업 메뉴에는 더 이상 shipDate 옵션이 없습니다.
를 선택하여 item 요소에 shipDate를 추가하십시오. 값이 현재 날짜로 설정된 shipDate 요소가 추가됩니다. 하나 이상의 shipDate 요소가 있어야 한다는 제한조건이 충족되었으므로shipDate 요소를 선택하고 팝업에서 제거를 선택하여 제거하면 옵션을 다시 사용할 수 있습니다.
열거된 요소 유형
<element name="state" type="po:USState"/>
<simpleType name="USState"> <restriction base="string"> <enumeration value="CA"></enumeration> <enumeration value="PA"></enumeration> <enumeration value="AR"></enumeration> </restriction> </simpleType>
PurchaseOrder.xml에 대해 XML 편집기의 디자인 보기에서 shipTo 요소 아래의 state 텍스트 필드를 선택하십시오. 목록이 표시되고 이 목록에서 USState 단순 유형의 열거 값에 따라 제한되는 세 개의 값(CA, PA 및 AR)을 선택할 수 있습니다.
인스턴스 문서에서 파생된 유형 사용(xsi:type 속성)
<element name="shipTo" type="ipo:Address"/> <element name="billTo" type="ipo:Address"/>
address.xsd에서는 두 개의 복합 유형 USAddress와 UKAddress가 기본 유형 Address를 확장합니다.
인스턴스 문서 ipo.xml은 xsi:type 속성을 사용하여 Address의 다른 파생(예: USAddress)을 사용하도록 선택할 수 있습니다.
XML 편집기의 디자인 보기에서 shipTo 요소 아래에 있는 xsi:type 속성을 선택하십시오. 목록을 사용하여 사용할 Address 유형을 선택하는 방법을 확인하십시오. 안내되는 지원은 콤보 상자에서 선택하는 유형을 기반으로 합니다.
다중 스키마 및 네임스페이스에 대한 작업
분기별 보고서 예제는 여러 네임스페이스의 다중 스키마에 대해 작업하는 방법을 보여줍니다. 여기에는 PurchaseOrder/international 폴더 아래에 address.xsd, ipo.xsd, report.xsd 및 report.xml 파일이 있습니다.
스키마가 커지면 쉬운 유지보수, 재사용 및 가독성을 위해 컨텐츠를 여러 스키마 문서에 나누는 것이 좋습니다. XML 스키마는 이를 지원하는 두 가지 구성(include 및 import)을 정의합니다. include 요소는 포함된 스키마에서 정의 및 선언을 현재 스키마로 불러옵니다. 그러려면 포함된 스키마가 포함하는 스키마와 동일한 대상 네임스페이스에 있어야 합니다. import 요소도 유사하게 동작하지만 가져오는 스키마는 다른 네임스페이스에 있을 수 있습니다.
include 및 import에 대한 자세한 정보는 XML 스키마 편집기 온라인 도움말을 참조하십시오.
<element name="Book" type="Catalogue:BookType" substitutionGroup="Catalogue:Publication"/> <element name="Magazine" type="Catalogue:MagazineType" substitutionGroup="Catalogue:Publication"/>
Catalogue의 컨텐츠는 대체 그룹에 있는 모든 요소가 될 수 있습니다. XML 편집기의 디자인 보기에서 Catalogue 요소에 대해 하위 추가 메뉴를 선택하십시오. Book과 Magazine 둘 다가 Publication 요소의 컨텐츠로 어떻게 대체될 수 있는지 확인하십시오. 또한 인스턴스 문서에서 Publication 요소를 직접 사용할 수 없도록 Publication 요소를 abstract로 선언하였습니다.