gpt4 book ai didi

xsd 的 Java Saxon 有效子树

转载 作者:行者123 更新时间:2023-12-02 10:55:59 24 4
gpt4 key购买 nike

使用 Saxon-HE 我想解析一个 xsd 文件,获取结果树并从给定的元素名称中获取结果子树,以及所有必需的 simpleType 和复杂类型(均使用类型引用和来自 ref),例如 parse像这样的文件:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="PSS" xmlns=""
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element maxOccurs="unbounded" name="Assistito">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="IDCittadino" type="IDCittadino"/>
<xs:element maxOccurs="unbounded" name="Struttura">
<xs:complexType>
<xs:sequence>
<xs:element name="CodiceStruttura" type="CodiceStruttura"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="IDCittadino">
<xs:restriction base="xs:string">
<xs:minLength value="20"/>
<xs:maxLength value="32"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="CodiceStruttura">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

我需要从 name =“Struttura”的元素中获取子树,这还需要获取 name =“CodiceStruttura”的 simpleType,例如:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="PSS" xmlns=""
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Struttura">
<xs:complexType>
<xs:sequence>
<xs:element name="CodiceStruttura" type="CodiceStruttura"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="CodiceStruttura">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

注释

  • 一般来说,要保持一致的 xsd 应该保留 xs:element 中使用的所有类型,但您也可以使用“ref 属性”,这也应该考虑在内
  • 我不想使用 jaxb 或类似工具生成类,因为 xsd 文件每次都会更改,所以我无法使用类生成

提前致谢,

最佳答案

一般来说,我不建议使用模式文档的原始 XML 进行工作,我建议使用模式编译器生成的模式组件模型进行工作,因为否则您会发现自己要么 (a) 复制由模式编译器完成的所有工作模式编译器,或者 (b) 出错,并且没有正确处理所有模式。

您可以通过多种方式以编程方式访问架构组件模型。 Saxon 提供了两种方法(但都需要 Saxon-EE)。 (a) 您可以使用 Saxon 的模式处理器输出模式组件模型的 XML 表示形式(使用 com.saxonica.Validate -xsd:schema.xsd -scmout:schema.scm )。 (b) 您可以使用一组扩展函数从 XSLT 或 XQuery 访问模式组件模型,从 saxon:schema() 开始。

另一种选择是,Xerces 模式处理器为其内部模式组件模型提供 Java API,您可以使用 Xalan(或实际上 Saxon)扩展函数来访问此 API。

在所有这些情况下,可用的“架构组件模型”非常接近 W3C XSD 规范中描述的抽象架构组件模型。与使用原始模式文档的主要区别包括(a)所有导入、包含和跨组件引用都已得到解决; (b) 所有默认值均已扩大; (c) 扩展了模型组和属性组。

关于xsd 的 Java Saxon 有效子树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51741072/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com