如何使用 RELAX NG 模式和 JAXP 验证 XML 文档?

2023-11-21

我想使用 RELAX NG 模式验证 XML 文档,并且我想使用JAXP 验证 API.

通过谷歌搜索,我似乎可以使用JingISO RELAX JARV 至 JAXP 桥。不幸的是,将两者添加到我的类路径后,我无法让它工作。SchemaFactory只是抛出一个IllegalArgumentException当它尝试实例化工厂时 - 我查看了内部SchemaFactory, 显然SchemaFactoryFinder返回空结果。

所以我很感激任一问题的答案:

  • 我怎样才能让这个与Jing和这座桥一起工作?
  • 我应该尝试一组更好/不同的库吗?

我需要它与 Java 5 和 Java 6 一起使用。

Thanks!


我解决了这个错误在 Java 1.6 上与以下行:

// Specify you want a factory for RELAX NG "compact"
System.setProperty(SchemaFactory.class.getName() + ":" + XMLConstants.RELAXNG_NS_URI, "com.thaiopensource.relaxng.jaxp.CompactSyntaxSchemaFactory");

SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.RELAXNG_NS_URI);

这允许我使用 Jing 根据 Compact RELAX NG 模式验证 XML 文档。完整示例如下。我没有使用这座桥或其他任何东西。运行时类路径只有 jing.jar (20091111) 和我自己的 Validator 类。

import java.io.File;
import java.io.IOException;

import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;

import org.xml.sax.SAXException;

public class Validate
{

    public static void main(String[] args) throws SAXException, IOException
    {
        // Specify you want a factory for RELAX NG
        System.setProperty(SchemaFactory.class.getName() + ":" + XMLConstants.RELAXNG_NS_URI, "com.thaiopensource.relaxng.jaxp.CompactSyntaxSchemaFactory");
        SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.RELAXNG_NS_URI);

        // Load the specific schema you want.
        // Here I load it from a java.io.File, but we could also use a
        // java.net.URL or a javax.xml.transform.Source
        File schemaLocation = new File(args[0]);

        // Compile the schema.
        Schema schema = factory.newSchema(schemaLocation);

        // Get a validator from the schema.
        Validator validator = schema.newValidator();

        for (int i = 1; i < args.length; i++)
        {
            String file = args[i];

            // Check the document
            try
            {
                validator.validate(new StreamSource(new File(file)));
                System.out.println(file + " is valid.");
            }
            catch (SAXException ex)
            {
                System.out.print(file + " is not valid because: " + ex.getMessage());
            }
        }
    }

}

再说一次,我只测试了这个 ion Java 1.6。

$ java -version
java version "1.6.0_01"
Java(TM) SE Runtime Environment (build 1.6.0_01-b06)
Java HotSpot(TM) Client VM (build 1.6.0_01-b06, mixed mode, sharing)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 RELAX NG 模式和 JAXP 验证 XML 文档? 的相关文章

随机推荐

  • 如何从时间(小时)中删除前导零

    我想要从 1 到 9 的小时不带前导零 但分钟带零 同时还要在时间上添加 15 分钟 现在 当我输入 1 和 46 时 我得到 02 01 我想得到 2 01 Scanner scan new Scanner System in int h
  • Request.Browser.IsMobileDevice 不适用于 iPadAir2 和 iOS 13.0.1

    I am able to detect iPadAir2 device running on iOS 11 4 using Request Browser IsMobileDevice and it gives me UserAgent i
  • 颁发者证书的过期状态是否会影响主体的过期?

    如果证书颁发者颁发的证书的过期时间发生在颁发者自己的证书过期之后 那么颁发者的证书过期后 颁发的证书是否仍然有效 为了更清楚 让我举个例子 I 发行人 C 颁发的证书 如果我在 2007 年创建了 C 到期日期为 2017 年 我的证书20
  • Leopard 终端(和 iTerm)忽略控制组合键

    I am very used to using Ctrl A Ctrl E Ctrl L etc as shortcuts to operations beginning of line end of line clear terminal
  • 找到不在列表中的最小整数

    我的一位同事使用了一个有趣的面试问题 假设给您一个非常长的 未排序的无符号 64 位整数列表 你如何找到最小的非负整数does not出现在列表中 后续 既然已经提出了明显的排序解决方案 你能比 O n log n 更快地完成它吗 后续 您
  • 查找“nan”并将其替换为数字

    我想替换数组中的数字 3 而不是所有 nan 这是我的代码 train train replace nan int 3 但我的数组没有任何变化 你能指导一下吗 您可以使用np isnan import numpy as np train n
  • 从 ExceptionLogger 引用操作参数

    我想利用新方法来全局记录错误 我写了一个继承的类ExceptionLogger并覆盖Log 方法 然后将其注册为替代品 public class TraceExceptionLogger ExceptionLogger public asy
  • 在 .NET 中创建插件环境的最佳方法

    我读了这篇文章如何在 NET中加载插件 我实在看不出微软的System Addin命名空间有什么高明之处 为什么我不能在 bin 目录中有一个插件文件夹 用户可以将程序集放入其中以实现我设计的界面 然后 我可以使用反射来创建插件类的实例 并
  • Phonegap 在应用程序运行时启用 GPS/位置

    我正在使用 jquery ui maps 和 HTML5 地理位置向用户显示位置列表 我需要利用用户的地理位置 所以 这是用例 用户未启用 GPS 定位服务 用户打开应用程序并导航到调用的视图导航器 地理位置获取用户的位置 应用程序出错并通
  • 尝试理解 javascript 中 for 循环内的递归

    我一直盯着这个问题的答案 甚至在每次迭代中写下变量之类的东西 我只是不明白这里的过程 当我输入控制台日志时 我看到 permute 在到达此行之前被调用 input length 1 次 input splice i 0 ch 当我完全迷失
  • 删除 ttk 组合框鼠标滚轮绑定

    我有一个 ttk 组合框 我想从鼠标滚轮解除绑定 以便在组合框处于活动状态时使用滚轮滚动不会更改值 而是滚动框架 我尝试过解除绑定以及绑定到空函数 但都不起作用 见下文 import Tkinter as tk import ttk cla
  • 从 9i 客户端连接到 11g 数据库时,ORA-01017 用户名/密码无效

    我正在尝试从具有 9i v9 2 0 1 客户端的 PC 连接到 11g v11 2 0 1 0 上的架构 它似乎可以很好地连接到某些模式 但不是这个 它返回一个ORA 01017 Invalid Username Password每次都会
  • 区分带有默认值和无值的&可选参数

    根据功能在 GigaMonkeys 上 Common Lisp 通过以下方式支持可选位置参数 optional并且默认值可以任意设置 默认的默认值为nil defun function mandatory argument optional
  • 如何通过 MVVM 为 DataGrid ItemSsource 设置过滤器

    我有一个DataGrid绑定到一个集合视图源在 XAML 中
  • Next.js React 应用程序中未定义窗口

    In my Next js我似乎无法访问该应用程序window 未处理的拒绝 ReferenceError 窗口未定义 componentWillMount console log window innerHeight window inn
  • 如何批量发送包含多个 url 的多部分 html 帖子?

    我正在与 gmail api 交谈 并希望对请求进行批处理 他们在这里有一个友好的指南 https developers google com gmail api guides batch 这表明我应该能够使用多部分 混合并包含不同的网址
  • Android 中使用 XML 布局的自定义视图

    我有一个 ListAdapter 其中有很多不同的行布局 为了获得干净的代码 我想将视图类中适配器的 getView 的行布局外包 是否可以将 XML 布局扩展为自定义视图 我只找到了 LayoutInflater 但它返回一个 View
  • 如何从列表中查找不存在于r中另一个列表中的元素

    我有两个具有相同向量但长度不同的列表 list1 lt list a 1 10 b 3 20 list2 lt list a c 2 5 8 b c 3 5 11 20 我想从每个向量中找到元素list1不存在于相应的向量中list2 除了
  • Typedef 结构与结构? |定义区别|

    以下块位于 main 在每个函数之前 全局范围 第一块 struct flight int number int capacity int passengers 与此相反 您可以创建数组 指针 变量 var 它只定义了这一自定义数据类型的一
  • 如何使用 RELAX NG 模式和 JAXP 验证 XML 文档?

    我想使用 RELAX NG 模式验证 XML 文档 并且我想使用JAXP 验证 API 通过谷歌搜索 我似乎可以使用Jing和ISO RELAX JARV 至 JAXP 桥 不幸的是 将两者添加到我的类路径后 我无法让它工作 SchemaF