【问题标题】:Need help on XSD import another XSD values在 XSD 导入另一个 XSD 值方面需要帮助
【发布时间】:2013-12-09 08:25:41
【问题描述】:

我学习了几个教程,但无法按照我的意愿导入 XSD。请帮助我解决这个问题。

这是我的xml

    <?xml version="1.0" encoding="UTF-8"?>    
       <mail>
           <portalname>rezbase_v3</portalname>
           <portalcolor1>'#b0b8da'</portalcolor1>
           <portalcolor2>#0a1e75</portalcolor2>
           <portalcolor3> '#333333'</portalcolor3>
           <portalcolor4> '#e7eaf7'</portalcolor4>
           <portalcolorfont1> '#bcc9ff'</portalcolorfont1>
           <portalcolorfont2> '#000000'</portalcolorfont2>     
      </mail>

我为门户样式设置了单独的 xsd,看起来像这样 (StyleApplyerDetailsBuilder.xsd)

        <?xml version="1.0" encoding="ISO-8859-1" ?>
        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"   targetNamespace="http://NamespaceTest.com/StyleApplyerDetailsBuilder" elementFormDefault="qualified" >
     <xs:group name="colors">
      <xs:sequence>
        <xs:element name="portalcolor1" type="xs:string"/>
        <xs:element name="portalcolor2" type="xs:string"/>
        <xs:element name="portalcolor3" type="xs:string"/>
        <xs:element name="portalcolor4" type="xs:string"/>
        <xs:element name="portalcolorfont1" type="xs:string"/>
        <xs:element name="portalcolorfont2" type="xs:string"/> 
      </xs:sequence>
    </xs:group>
             </xs:schema>

我的主要 xsd 是这样的 (main.xsd)

   <?xml version="1.0" encoding="ISO-8859-1" ?>
   <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:include schemaLocation="../../xsdFactory/commons/StyleApplyerDetailsBuilder.xsd"/>
   <xs:element name="mail">
   <xs:complexType>
    <xs:sequence>
      <xs:element type="xs:string" name="portalname"></xs:element>
            <!-- I need to import my other xsd(StyleApplyerDetailsBuilder) to here so I can validate my xml -->
      <xs:group ref="colors" maxOccurs="unbounded" minOccurs="1"/>        
      </xs:sequence>
   </xs:complexType>
   </xs:element>
  </xs:schema>

我需要的是导入 StyleApplyerDetailsBuilder.xsd 到 main.xsd 并验证上面的 xml。

【问题讨论】:

标签: xml xslt xsd


【解决方案1】:

你可以使用

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:include schemaLocation="StyleApplyerDetailsBuilder.xsd"/>
   <xs:element name="mail">
   <xs:complexType>
     <xs:sequence>
       <xs:element type="xs:string" name="portalname"></xs:element>
       <!-- I need to import my other xsd(StyleApplyerDetailsBuilder) to here so I can validate my xml -->
       <xs:element ref="portalcolor1"/>
       <xs:element ref="portalcolor2"/>
       <!-- reference the other elements here -->

      </xs:sequence>
    </xs:complexType>
</xs:element>

通常你会定义一个组并引用它,例如在要包含的样式表中定义

<xs:group name="colors">
  <xs:sequence>
    <xs:element name="portalcolor1" type="xs:string"/>
    <xs:element name="portalcolor2" type="xs:string"/>
    <xs:element name="portalcolor3" type="xs:string"/>
    <xs:element name="portalcolor4" type="xs:string"/>
    <xs:element name="portalcolorfont1" type="xs:string"/>
    <xs:element name="portalcolorfont2" type="xs:string"/> 
  </xs:sequence>
</xs:group>

然后您使用如图所示的包含,而不是对您使用的不同元素的所有引用

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:include schemaLocation="StyleApplyerDetailsBuilder.xsd"/>
   <xs:element name="mail">
   <xs:complexType>
     <xs:sequence>
       <xs:element type="xs:string" name="portalname"></xs:element>
       <!-- I need to import my other xsd(StyleApplyerDetailsBuilder) to here so I can validate my xml -->
       <xs:group ref="colors"/>        
      </xs:sequence>
    </xs:complexType>
</xs:element>

【讨论】:

  • 通过提供对子节点的单一引用访问,是否有任何其他方法不提供所有引用
  • @RezgHansa,我添加了定义和引用组的示例代码。
  • 嗨马丁我已经改变了问题并尝试了你的方式,但它给了我一些像这样的错误“org.xml.sax.SAXParseException; systemId: file:/rezsystem/rezsystem_hansa/jboss-4.0.3SP1 /server/default/deploy/RezgEmailService.war/xsd/xsdFactory/commons/StyleApplyerDetailsBuilder.xsd; lineNumber: 2; columnNumber: 158; src-include.2.1: 引用模式的targetNamespace,当前为'NamespaceTest.com/StyleApplyerDetailsBuilder',必须与包含架构的相同,当前为“空”。"
  • @RezgHansa,看来您已经对样本进行了相当大的编辑。现在,您在一个架构上有一个目标命名空间,但在另一个架构上没有。 xs:include 仅在两种模式都没有目标命名空间或具有相同命名空间时才有效。您的带有 &lt;mail&gt; 元素的 XML 示例没有任何命名空间,因此不清楚为什么要将命名空间放入其中一个架构中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
相关资源
最近更新 更多