加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml – 使用schematron进行xsd验证

发布时间:2020-12-16 23:17:02 所属栏目:百科 来源:网络整理
导读:我正在尝试将schematron验证添加到我的xsd中. 这是我的新xsd: xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sch="http://www.ascc.net/xml/schematron" elementFormDefault="qualified" gt; xs:element name="books" xs:complextype xs:se
我正在尝试将schematron验证添加到我的xsd中.
这是我的新xsd:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    xmlns:sch="http://www.ascc.net/xml/schematron"    
    elementFormDefault="qualified" &gt;

 <xs:element name="books"> 
  <xs:complextype>
   <xs:sequence>   ;P 
    <xs:element name="book" type="bookType" maxoccurs="unbounded">
      <xs:annotation>
       <xs:appinfo>
        <sch:pattern id="onLoanTests" xmlns:sch="http://purl.oclc.org/dsdl/schematron">
          <sch:rule context="book">
           <sch:report test="@on-loan and not(@return-date)">
           Every book that is on loan must have a return date
           </sch:report>
          </sch:rule>
        </sch:pattern>
       </xs:appinfo>
      </xs:annotation>
    </xs:element>
   </xs:sequence> 
  </xs:complextype>
 </xs:element>

 <xs:complextype name="bookType">
  <xs:sequence>
   <xs:element name="title" type="xs:string" />
   <xs:element name="author" type="xs:string" />
   <xs:element name="publication-date" type="xs:string" />
  </xs:sequence>
  <xs:attribute name="publisher" type="xs:string" use="required" />
  <xs:attribute name="on-loan" type="xs:string" use="required" />
  <xs:attribute name="return-date" type="xs:string" use="optional" />
 </xs:complextype>

</xs:schema>

这是我的测试xml:

<books>
<book publisher="ddd" on-loan="sdsd">
  <title>idan title</title> 
  <author>idan author</author> 
  <publication-date>idan date</publication-date> 
</book>
</books>

使用我提供的xml我没有得到验证错误.

我假设我会收到消息“每本借出的书必须有一个返回日期”并且xml将无效.建议为什么?

更新
我确实通过在oXygen xml编辑器中使用schematron验证来使其工作.
但是,我想如何在我的代码中使用?
我需要安装一些特别的东西吗?链接到另一个图书馆?

UPDATE2
在“处理”部分显然是here,所有需要的步骤都是详细的.

解决方法

您的第二次更新可能是该主题的最佳参考. XSD本身不允许您使用一种机制来验证schematron以及架构本身. xsd:appinfo元素允许您嵌入不同模式语言的验证信息,但它专门用于应用程序(因此名称).

这意味着你需要做一些事情来启用它.您引用的论文提供了最佳方法,归结为:

>使用XSLT提取schematron
来自XSD的规则
>使用参考XSLT
从…实施
schematron.com转换了
架构到XSLT
>验证您的实例文档
对抗XSD
>验证您的实例文档
通过处理反对schematron
XSLT在2中创建.

根据您的环境,您可能需要考虑查看XProc实现(calabash或calumet)以实现该管道.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读