Nat*_*ate 4 xml xsd xinclude xml-namespaces
我正在尝试使用XML Includes来帮助管理需要人和机器都可用的大型XML结构.
但是在尝试构建可以针对现有模式进行验证的XML文件时遇到了无数问题.这是我正在尝试做的简化示例.
我的"main.xml"文件无法验证.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Main.xml - This fails to validate. -->
<ns1:main xsi:schemaLocation="http://www.example.com/main main.xsd"
xmlns:ns1="http://www.example.com/main"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xi="http://www.w3.org/2001/XInclude">
<name>String</name>
<xi:include href="child.xml"/> <!-- What I'm trying to do. -->
</ns1:main>
Run Code Online (Sandbox Code Playgroud)
"child.xml"文件可以作为独立文件进行验证.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Child.xml - This validates fine, as a standalone file. -->
<ns1:child xsi:schemaLocation="http://www.example.com/main main.xsd"
xmlns:ns1="http://www.example.com/main"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<name>String</name>
<age>String</age>
</ns1:child>
Run Code Online (Sandbox Code Playgroud)
这是我的架构:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Main.xsd - My Simplified Schema -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ns1="http://www.example.com/main"
targetNamespace="http://www.example.com/main">
<!-- Main Element (References Child) -->
<xs:element name="main">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element ref="ns1:child"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Child Element -->
<xs:element name="child">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="age" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
我的问题几乎与名称空间明显相关,但我对如何解决问题感到茫然.
正如skaffman已经指出的那样,XML Schema和XInclude不兼容.
来自xmllint的验证错误消息清楚地说明了这一点:
main.xml:9: element include: Schemas validity error : Element '{http://www.w3.org/2001/XInclude}include': This element is not expected. Expected is ( {http://www.example.com/main}child ).
main.xml fails to validate
Run Code Online (Sandbox Code Playgroud)
引用W3C建议书:"XInclude定义与通过应用XML模式产生的增强信息集没有任何关系.这样的增强信息集可以作为输入信息集提供,或者这种增强可以应用于由包含产生的信息集."
因此,您应该首先通过应用XIncludes构造整个XML文件,然后验证此文件.
编辑:您可以使用xmllint和--xinclude来验证main.xml.
| 归档时间: |
|
| 查看次数: |
5322 次 |
| 最近记录: |