使用导入的命名空间解析 XML 模式
Parse XML schema with imported namespaces
我有一个复杂的 XML schema,由在不同文件中定义的多个命名空间组成。下面是在 XSD 图中创建的图,显示了架构的一小部分。
请注意,party
属于 partyType
类型,它在与 parties
不同的命名空间中定义。主文件 (veg.xsd
) 中 parties
的(简化)XML 如下所示:
...
<xsd:element name="parties" minOccurs="0">
<xsd:annotation>
<xsd:documentation>...</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="party" type="misc:partyType" maxOccurs="unbounded">
<xsd:annotation>
<xsd:documentation source="EML" xml:lang="en">...</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
...
现在,我的目标是为整个模式(跨命名空间)推导元素的层次结构,与上图非常相似。但是,当我在 R 中解析 veg.xsd
时,我无权访问导入的命名空间。例如,当列出所有具有 name 属性的元素时,我只得到在 veg.xsd
.
中定义的元素的名称
library(xml2)
def_xsd = read_xml("vegx_schema/veg.xsd")
xml_find_all(def_xsd, "//xsd:element") %>%
xml_attr("name") %>%
length()
[1] 52 # Should be much larger
感谢任何帮助!
如您所见,处理源模式文档并不容易。
通过 API.
处理编译的模式要好得多
我不知道 libxml2 以这种方式提供了什么。如果您可以使用 Java,那么 Xerces 会为已编译的模式提供 Java API,而 Saxon 允许您将已编译的模式导出为 SCM 文件(即 XML,但与源模式不同的是,它全部组合到一个更容易处理的文档中。
我有一个复杂的 XML schema,由在不同文件中定义的多个命名空间组成。下面是在 XSD 图中创建的图,显示了架构的一小部分。
请注意,party
属于 partyType
类型,它在与 parties
不同的命名空间中定义。主文件 (veg.xsd
) 中 parties
的(简化)XML 如下所示:
...
<xsd:element name="parties" minOccurs="0">
<xsd:annotation>
<xsd:documentation>...</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="party" type="misc:partyType" maxOccurs="unbounded">
<xsd:annotation>
<xsd:documentation source="EML" xml:lang="en">...</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
...
现在,我的目标是为整个模式(跨命名空间)推导元素的层次结构,与上图非常相似。但是,当我在 R 中解析 veg.xsd
时,我无权访问导入的命名空间。例如,当列出所有具有 name 属性的元素时,我只得到在 veg.xsd
.
library(xml2)
def_xsd = read_xml("vegx_schema/veg.xsd")
xml_find_all(def_xsd, "//xsd:element") %>%
xml_attr("name") %>%
length()
[1] 52 # Should be much larger
感谢任何帮助!
如您所见,处理源模式文档并不容易。
通过 API.
处理编译的模式要好得多我不知道 libxml2 以这种方式提供了什么。如果您可以使用 Java,那么 Xerces 会为已编译的模式提供 Java API,而 Saxon 允许您将已编译的模式导出为 SCM 文件(即 XML,但与源模式不同的是,它全部组合到一个更容易处理的文档中。