假设......
如果我正在编写Java应用程序,那么这项工作的技术是什么?它是XSOM之类的架构对象模型吗?是Java XPath API吗?还有别的吗?
编辑:对于那些想要在Saxon访问SCM的快速启动的人(根据Michael Kay的推荐),这里有一些Java代码(没有异常处理):
// Load the XSD into Saxon
Processor processor = new Processor(true);
SchemaManager schemaManager = processor.getSchemaManager();
DocumentBuilder documentBuilder = processor.newDocumentBuilder();
SAXSource saxSource = new SAXSource(new InputSource("path/to/yourSchema.xsd"));
XdmNode schema = documentBuilder.build(saxSource);
schemaManager.load(saxSource);
// Export the SCM
XdmDestination destination = new XdmDestination();
schemaManager.exportComponents(destination);
XdmNode xdmNode = destination.getXdmNode();
System.out.println(xdmNode.toString());
答案 0 :(得分:0)
查询模式文档是一件难以理解的事情,因为在XSD中有很多方法可以说同样的事情:例如,命名的模型组和属性组使您的任务变得相当复杂。
如果你正在寻找从QName和QName本身派生的类型,那么它真的很难。
在某种“已编译”的模式上进行此操作比在原始模式文档上进行操作要容易得多。
使用XSOM是一种方法,尽管它没有查询功能IIRC。另一种方法是使用Saxon的SCM输出:这是XML格式的已编译“模式组件模型”的表示;作为编译的模式,您不必担心xs:include,xs:redefine等的所有复杂性,而XML则意味着您可以在其上使用XQuery。 (我建议使用XQuery而不是XPath,因为会涉及很多连接,包括需要用户定义函数的递归连接。)