我可以仅使用XSD验证带有外部实体的XML

时间:2019-08-23 15:41:05

标签: xml xsd external

我想验证对外部实体的引用是硬编码的C:\ foo.txt,而不必在DTD文件中引用该实体。仅在模式中有没有办法做到这一点?下面列出的是一个xml文件,它在其中调用文件。我也需要该架构来验证文件伸出的位置。到目前为止,我还提出了可以验证某些元素的架构,但不能验证引用本身

<!DOCTYPE root [
  <!ENTITY file SYSTEM "file:////some/directory" >
]>
<ns1:test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:ns1="http://example.com/External" 
      xsi:schemaLocation="http://example.com/External External.xsd">
  <ns1:Author>Joe Somebody</ns1:Author>
    <ns1:Subject>get the files</ns1:Subject>
  <ns1:Content>&file;</ns1:Content>
</ns1:test> 

我目前拥有的架构是

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:ns1="http://example.com/External"
           targetNamespace="http://example.com/External"
            xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           elementFormDefault="qualified" >
  <xs:element name="test">
    <xs:complexType>
      <xs:sequence>
          <xs:element name="Author" type="xs:string" />
          <xs:element name="Subject" type="xs:string" />
          <xs:element name="Content" >
            <xs:simpleType>
                <xs:restriction base="xs:string">
                      <xs:pattern value="image"/>
               </xs:restriction>
            </xs:simpleType>
          </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

要使其最终起作用,我需要能够基于实体文件的错误路径使测试xml失败

0 个答案:

没有答案