我有一个xml片段,我需要编写XSD
<root xmlns="http://xmlns.oracle.com/sca/1.0" xmlns:id="http://xmlns.oracle.com/id/1.0">
<service name="Book" id:number="465"/>
</root>
以下XSD在生成JAXB类时出错。
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://xmlns.oracle.com/sca/1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="service">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="name"/>
<xs:attribute ref="ns:number" xmlns:ns="http://xmlns.oracle.com/id/1.0"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
错误是
C:\ Program Files \ Java \ jdk1.7.0_06 \ bin&gt; xjc -p test C:\ book.xsd 解析模式...... [错误] src-resolve.4.2:解析组件'ns:number'时出错。它被发现了 'ns:number'在命名空间'http://xmlns.oracle.com/id/1.0'中,但是组件 来自此命名空间的s不能从架构文档'file:/ C:/ book中引用。 XSD”。如果这是不正确的命名空间,可能需要'ns:number'的前缀 要改变。如果这是正确的命名空间,那么适当的'导入' 标签应添加到'file:/ C:/book.xsd'。 文件的第10行:/ C:/book.xsd
答案 0 :(得分:8)
实际上,您至少需要与命名空间一样多的XSD文件,因为一个XSD文件只能定位一个命名空间,或者不能定位。
由于您的根元素位于一个名称空间中,而该属性位于另一个名称空间中,因此至少需要两个文件。您可以通过 xsd:import “链接”它们。
热门XSD:
<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema xmlns="http://xmlns.oracle.com/sca/1.0" xmlns:id="http://xmlns.oracle.com/id/1.0" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://xmlns.oracle.com/sca/1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import schemaLocation="xsd-syntax-for-xml-attributes-with-namespace1.xsd" namespace="http://xmlns.oracle.com/id/1.0" />
<xsd:element name="root">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="service">
<xsd:complexType>
<xsd:attribute name="name" type="xsd:string" use="required" />
<xsd:attribute ref="id:number" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<强> XSD的语法换XML的属性与 - namespace1.xsd 强>
<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema xmlns="http://xmlns.oracle.com/id/1.0" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://xmlns.oracle.com/id/1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:attribute name="number" type="xsd:unsignedShort" />
</xsd:schema>
答案 1 :(得分:0)
使用以下两种模式
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://xmlns.oracle.com/sca/1.0" xmlns:id="http://xmlns.oracle.com/id/1.0" xmlns:sca="http://xmlns.oracle.com/sca/1.0">
<xs:import namespace="http://xmlns.oracle.com/id/1.0" schemaLocation="id.xsd"/>
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element ref="sca:service"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="service">
<xs:complexType>
<xs:attribute name="name" use="required" type="xs:NCName"/>
<xs:attribute ref="id:number" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
ID
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://xmlns.oracle.com/id/1.0" xmlns:id="http://xmlns.oracle.com/id/1.0" xmlns:sca="http://xmlns.oracle.com/sca/1.0">
<xs:import namespace="http://xmlns.oracle.com/sca/1.0" schemaLocation="Untitled2.xsd"/>
<xs:attribute name="number" type="xs:integer"/>
</xs:schema>