1

我有一个使用旧版本的 XML 规范 (http://www.w3.org/1999/XMLSchema) 构建的 XML 模式。我正在尝试使用架构解析 XML 消息(如下所示)。默认情况下,Xerces 1.1 解析器在应用程序域根目录中查找模式。我正在尝试将架构移动到我们网络目录中的公共位置。似乎我无法使用 Xerces 1.1 库在我的解析程序中将 URL 指定为模式位置。

所以我尝试升级我的程序以使用 JAXP DocumentBuilderFactory 及其 setSchema() 方法。这似乎找到了具有我提供的架构 URL 的架构,除了它给出了解析错误,因为架构(大概)不符合规范的更高版本(例如,我收到错误,因为我的 Ticket 元素不将其成员包装在 xs:Sequence 中)。

我无法升级我的架构,因为目前我无法强制外部客户重写他们向我们发送消息的应用程序。

谁能告诉我如何使用 JAXP 成功地解析/验证使用老式版本的模式规范?或者,有没有办法告诉 Xerces 1.1 DOMParser 使用由 URL(不是文件位置)定义的模式?

这是架构的示例:

<?xml version="1.0" encoding="UTF-8" ?>
<schema>
  <element name="Ticket">
     <complexType>
        <element ref="ID" />
        <element ref="User" />
     </complexType>
  </element>

  <element name="ID" type='string' />
  <element name="UserID" type='string' />
</schema>

XML 文档如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Ticket xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation='TicketSubmission.xsd'>
  <ID>2010:December2:Dec:12:05:33:245</ID> 
  <UserID>user123</UserID> 
</Ticket>

谢谢!

4

2 回答 2

0

使用旧版的 JAXP;也许1.6

于 2010-11-04T20:50:02.970 回答
0

因此,我得出的结论是,使用 1999 模式规范是个坏主意。支持 1999 模式规范的 Xerces 解析器的早期版本似乎在模式可以驻留在磁盘上的位置方面并不灵活。在我们可以让我们的客户使用更新版本的模式之前,我可能一直坚持将模式放在应用服务器根目录中。

Xerces 的更高版本(甚至在 Xerces 2 之前)似乎已经放弃了对 1999 模式规范的支持,转而支持 2001 模式规范。虽然,更高版本的 Xerces 似乎允许模式文件的位置更加灵活。

于 2010-11-08T04:02:27.277 回答