저는 SCTE-224 표준 XML 스키마 (http://www.scte.org/schemas/224/2015/SCTE224.xsd)의 확장 작업을하고 있습니다. SCTE-224 표준 요소 내부에 가야 난 내 자신의 네임 스페이스에 일부 최상위 요소를 정의했다XML 스키마의 확장을 올바르게 검증하는 방법은 무엇입니까?
<xs:element minOccurs="0" name="Metadata">
<xs:complexType>
<xs:sequence>
<xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other"/>
</xs:sequence>
</xs:complexType>
</xs:element>
: 사양은 Metadata
요소 내의 다른 네임 스페이스의 요소를 포함하여 표준의 확장 가능 . 예를 들어, bam:Program
요소 :
<Media id="/media/12345" description="A standard SCTE-224 Media element.">
<Metadata>
<bam:Program>
... Additional bam-namespaced elements
</bam:Program>
</Metadata>
</Media>
내 목표는 계정에 표준의 요소와 bam:
요소를 모두 복용, 우리의 확장 된 사양에 대한 스키마를 정의하는 내 자신의 XSD를 가질 수있을 것입니다. 아래는 확장 요소의 첫 번째 찌르기입니다. 그러나 bam:Program
요소가 Media/Metadata
안에 나타나야한다고 지정하는 방법을 알 수 없습니다.
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://specs.bamgrid.com" targetNamespace="http://specs.bamgrid.com" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xlink="http://www.w3.org/1999/xlink"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="http://www.w3.org/1999/xlink.xsd"/>
<xs:element name="Genres">
<xs:complexType>
<xs:sequence>
<xs:element name="Genre">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="type" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Program">
<xs:complexType>
<xs:sequence>
<xs:element name="ProgramDetails" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="ProgramDetail" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Title" type="xs:string" minOccurs="0"/>
<xs:element name="TitleBrief" type="xs:string" minOccurs="0"/>
<xs:element name="TitleSort" type="xs:string" minOccurs="0"/>
<xs:element name="Description" type="xs:string" minOccurs="0"/>
<xs:element name="DescriptionBrief" type="xs:string" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="language" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-z][a-z]"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ProgramType" type="xs:string" minOccurs="0"/>
<xs:element name="Images" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Image" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute ref="xlink:href" use="required"/>
<xs:attribute name="height" type="xs:int" use="required"/>
<xs:attribute name="width" type="xs:int" use="required"/>
<xs:attribute name="type" type="xs:string"/>
<xs:attribute name="key" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element ref="Genres" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="contentSource" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:schema>
누구든지이 확장 스키마를 설명하는 올바른 방향을 알려줄 수 있습니까?
왜 필요한 부모 요소를 지정 하시겠습니까? 나는 그것이 가능하다고 생각하지 않지만, 이유를 보지 못한다. – daniu
@ daniu - ''요소는' '요소가' '내부에 있어야 시스템에서 유효합니다. –
Jared
당신이해야 할 일은'Program' 자식을 필요로하는 확장 된'Media' 요소를 추가 한 다음 검증을 위해 사용하는 것입니다. 그것은'Media'와는 다른 네임 스페이스에있을 것입니다. 그러나 xslt를 사용하여 xml 문서를 새로운 네임 스페이스로 변형하고 유효성을 검사 할 수 있습니다. – daniu