如何使用 Python 验证与 XSD 文件相关的两个 XML 文件

How validate two XML files related against an XSD file with Python

提问人:Usuario86 提问时间:1/19/2023 更新时间:1/19/2023 访问量:39

问:

我尝试使两个 XML 文件有效:一个文件 file1.xml 有一个具有 xs:ID 类型属性的元素,在另一个 file2 .xml 中有一个具有 xs:IDREF 类型属性的元素,为了验证这一点,我使用 file.xsd。

这是我的尝试:

<!-- file1.xml -->
<book id="l1">
  <title>El señor de los anillos</title>
  <author>J.R.R. Tolkien</author>
</book>
<!-- file2.xml -->
<review ref="l1">
  <comment>Un clásico de la literatura</comment>
  <score>5</score>
</review>
<!-- file.xsd -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <!-- book -->
  <xs:element name="book" type="bookType">
  </xs:element>
  
  <!-- review -->
  <xs:element name="review" type="reviewType">
    <xs:unique name="bookID" >
      <xs:selector xpath="book"/>
      <xs:field xpath="@id"/>
    </xs:unique>
    <xs:keyref name="reviewRef" refer="bookID">
      <xs:selector xpath="review"/>
      <xs:field xpath="@ref"/>
    </xs:keyref>
  </xs:element>

  <!-- book -->
  <xs:complexType name="bookType">
    <xs:sequence>
      <xs:element name="title" type="xs:string"/>
      <xs:element name="author" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:ID"/>
  </xs:complexType>

  <!-- review -->
  <xs:complexType name="reviewType">
    <xs:sequence>
      <xs:element name="comment" type="xs:string"/>
      <xs:element name="score" type="xs:integer"/>
    </xs:sequence>
    <xs:attribute name="ref" type="xs:IDREF" use="required"/>
  </xs:complexType>
  
</xs:schema>

尝试查看 xmlschema 文档,但我唯一能做的就是:

from xmlschema import XMLSchema

schema = XMLSchema('file.xsd')

schema.validate('file1.xml')
schema.validate('file2.xml')
Python XML 文件 验证 XSD

评论

0赞 j_b 1/19/2023
stackoverflow.com/questions/299588/......可能会为您提供一些替代方案。
0赞 Martin Honnen 1/19/2023
最后,该架构允许两个不同的根元素(例如 或 ),但声明这些元素之间的引用约束。由于任何 XML 文档都具有单个根,因此允许两个不同的文档但实际上没有意义,但期望它们之间有约束。bookreview

答: 暂无答案