我构建了以下('Person.xsd')XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:person.com.test"
xmlns="urn:person.com.test">
<xs:element name="person" type="Person" />
<xs:complexType name="Person">
<xs:sequence>
<xs:element name="first_name" type="xs:string" />
<xs:element name="last_name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
以下XML文档('Person.xml'):
<?xml version="1.0"?>
<person
xmlns="urn:person.com.test"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:person.com.test person.xsd" >
<first_name>Joe</first_name>
<last_name>Bloggs</last_name>
</person>
但是当我验证XML时(我使用的是Netbeans 8.x,但我尝试过的其他验证器给出了非常相似的结果);我得到以下无益的消息:
XML validation started.
Checking file:[...]/validator/src/main/resources/person.xml...
Referenced entity at "file:[...]/validator/src/main/resources/person.xsd".
cvc-complex-type.2.4.a: Invalid content was found starting with element 'first_name'. One of '{first_name}' is expected. [7]
XML validation finished.
编辑:结果我在这里对'targetnamespace'和其他东西的含义有一些误解。
接受的答案有效 - 但是@Ian Roberts指出(事实上这可能是另一篇文章的真实副本),'first_name'和'last_name'是('person'元素的子元素)仍然(由于某种原因)被视为根本没有名称空间。
无论如何:我已经像这样通过XML和XSD进行了修改 - 而且这很有效 - 而且我相信这里的元素是所有人(这就是我需要的)所有这些都在person.com.test命名空间中:
<?xml version="1.0"?>
<p:person
xmlns:p="urn:person.com.test"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:person.com.test person.xsd" >
<p:first_name>Joe</p:first_name>
<p:last_name>Bloggs</p:last_name>
</p:person>
这个ALSO实际上是这样的:(原始XML)
<person
xmlns="urn:person.com.test"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:person.com.test person.xsd" >
<first_name>Joe</first_name>
<last_name>Bloggs</last_name>
</person>
只要XSD中包含elementFormDefault =“qualified”指令。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:person.com.test"
xmlns="urn:person.com.test"
elementFormDefault="qualified">
<xs:element name="person" type="Person" />
<xs:complexType name="Person">
<xs:sequence>
<xs:element name="first_name" type="xs:string" />
<xs:element name="last_name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
答案 0 :(得分:1)
声明名称空间xmlns:prefix="urn:person.com.test"
<?xml version="1.0"?>
<prefix:person xmlns:prefix="urn:person.com.test"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:person.com.test person.xsd" >
<first_name>Joe</first_name>
<last_name>Bloggs</last_name>
</prefix:person>
我通过XMLSpear验证