Dash XSD名称空间映射

时间:2018-02-01 19:24:21

标签: java xml xsd jaxb

我制作了以下XML架构

<?xml version="1.0" encoding="UTF-8"?>                                                      
<xs:schema                                                                                  
    targetNamespace="urn:mpeg:dash:schema:mpd:2011"                                         
    xmlns:xs="http://www.w3.org/2001/XMLSchema"                                             
    xmlns:cenc="urn:mpeg:cenc:2013"                                                         
    xmlns:mspr="urn:microsoft:playready"                                                    
    elementFormDefault="qualified"                                                          
>                                                                                                                                                                                        
  <xs:element name="ContentProtection">
    <xs:complexType>
        <xs:sequence>                                                     
          <xs:element name="pssh" type="xs:string"/>
          <xs:element name="pro" type="xs:string"/>
        </xs:sequence>
      <xs:attribute name="value" type="xs:string" />
      <xs:attribute name="schemeIdUri" type="xs:string" />       
    </xs:complexType>
  </xs:element>
</xs:schema>

我试图了解如何进行正确的映射,以便在生成XJC剧集文件时,我得到一个映射,以便JAXB知道pssh XML元素属于&#34 ;瓮:MPEG:CENC:2013&#34;名称空间和pro XML元素属于&#34; urn:microsoft:playready&#34;命名空间。

基本上,我需要我的反序列化类最终结果如下:

  @XmlElement(namespace = "urn:mpeg:cenc:2013", required = true)
  protected String pssh;
  @XmlElement(namespace = "urn:microsoft:playready", required = true)
  protected String pro;

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:0)

想出来......

必须制作我自己的cencmspr XML模式,并将它们作为类型导入原始模式。

cenc.xsd

<xs:schema targetNamespace="urn:mpeg:cenc:2013"                                                                                                                                          
           attributeFormDefault="qualified"
           elementFormDefault="qualified"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns="urn:mpeg:cenc:2013">
    <xs:element name="pssh" type="xs:base64Binary"/>
</xs:schema>

mspr.xsd

<xs:schema targetNamespace="urn:microsoft:playready"                                                                                                                                     
           attributeFormDefault="qualified"
           elementFormDefault="qualified"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns="urn:microsoft:playready">
    <xs:element name="pro" type="xs:base64Binary"/>
</xs:schema>

ContentProtection.xsd

<?xml version="1.0" encoding="UTF-8"?>                                                                                                                                                   
<xs:schema
    targetNamespace="urn:mpeg:dash:schema:mpd:2011"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:cenc="urn:mpeg:cenc:2013"
    xmlns:mspr="urn:microsoft:playready"
    elementFormDefault="qualified"
    >

  <xs:import namespace="urn:mpeg:cenc:2013" schemaLocation="cenc.xsd"/>
  <xs:import namespace="urn:microsoft:playready" schemaLocation="mspr.xsd"/>

  <xs:element name="ContentProtection">
    <xs:complexType>
        <xs:sequence>
          <xs:element ref="cenc:pssh"/>
          <xs:element ref="mspr:pro"/>
        </xs:sequence>
      <xs:attribute name="value" type="xs:string" />
      <xs:attribute name="schemeIdUri" type="xs:string" />
    </xs:complexType>
  </xs:element>
</xs:schema>    

现在JAXB正确地反序列化所有内容。