XSD和XML中的版权注释

时间:2018-10-29 13:33:52

标签: xml xsd annotations xsd-validation xml-validation

根据Where to put copyright information in an XSD?,在xsd中放置版权声明的一种方法是插入类似

<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsd:annotation>
  <xsd:appinfo>
    <copyright-notice>
      Copyright 2015 Example.com. All rights reserved.
    <copyright-notice>
    <license uri="http://www.apache.org/licenses/LICENSE-2.0"
             version="2.0">Apache License, Version 2.0</license>
    <!-- ... -->
  </xsd:appinfo>
</xsd:annotation>
<!-- ... -->
</xs:schema>

如果我这样做,那确实可以。

但是现在,我想在相应的XML中插入类似内容:

<MyCase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="MyCaseDefinition.xsd">
<annotation>
  <appinfo>
    <copyright-notice>
      Copyright 2015 Example.com. All rights reserved.
    </copyright-notice>
    <license uri="http://www.apache.org/licenses/LICENSE-2.0"
             version="2.0">Apache License, Version 2.0</license>
  </appinfo>
</annotation>
<!-- ... -->
</MyCase>

但是,如果这样做,我会得到一个错误:

  

以元素“ annotation”开头的无效内容

加载文件时

似乎上面的2个是排他的:

  • 如果将注释放在XSD中,那么我就不能在XML中放置相应内容。
  • 如果我没有在XSD中放置任何内容,那么XML中的注释就可以了。

如何获得两个文件的版权声明?

2 个答案:

答案 0 :(得分:0)

我认为您只是忘了一个斜杠来关闭COPYRIGHT-NOTICE标签: 尝试请

</copyright-notice> 

代替第二个

<copyright-notice>

在您的xsd文件中标记。

您怎么看?

答案 1 :(得分:0)

  

似乎上面的2个是排他的:

     
      
  • 如果将注释放在XSD中,那么我就不能在XML中放置相应内容。
  •   
  • 如果我没有在XSD中放置任何内容,那么XML中的注释就可以了。
  •   

没有这种耦合:

  • 您可以将您或您的工具想要的任何XML元素放入XSD的xsd:annotation/xsd:appinfo元素中。

  • 如果希望对XML中的任何元素允许使用不同的XML内容模型,则必须调整为XSD中的此类元素指定的内容模型。

  

如何获得两个文件的版权声明?

要允许copyright-notice作为MyCase的子代,请将其添加到XSD中的MyCase的内容模型中。无论有没有显示的xsd:annotation/xsd:appinfo传统,您都可以这样做。 (可能不希望这样做,因为在创建XML时无需遵循向XSD添加xsd:annotation/xsd:appinfo元素的要求。)