我在uni学习XML,并且在使用多个命名空间时遇到困难。从下面的代码中可以看出,我希望元素“queries”拥有自己的命名空间。在一些在线研究之后,我收集到了为了在XML Schema中支持它,我需要在一个单独的xsd文件中为它创建一个类型,然后将这个xsd导入到主xsd文件中。
我试图这样做,我认为我做得很好,但是当我验证XML时,我遇到了很多错误。
任何人都可以向我解释我做错了吗?
感谢。
invoice.xml文件:
<invoice xmlns="http://www.fakenamespace.com/ns/invoices"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.fakenamespace.com/ns/invoices invoice.xsd">
<company>b2b Software Magic Ltd</company>
<reference>MyNet201</reference>
<date>2005-11-11</date>
<enquiries xmlns:enq="http://www.fakenamespace.com/ns/enquiriesType">
<enq:name>Paul White</enq:name>
<enq:phone>0207 634 6547</enq:phone>
</enquiries>
<clientbusiness>
<id>345533</id>
<contactname>Mr Barrny Hales</contactname>
<name>MyNetGlobix Plc</name>
<address>
<street>2 Caxton Street</street>
<city>London</city>
<postcode>SW1 H0QE</postcode>
</address>
</clientbusiness>
<products>
<product>
<description>Golden number development version 2 (1 day)</description>
<amount currency="GBP">500.00</amount>
</product>
</products>
<finalamounts>
<NET currency="GBP">500.00</NET>
<VAT>
<percent>17.5</percent>
<amount currency="GBP">87.50</amount>
</VAT>
<total currency="GBP">587.50</total>
</finalamounts>
</invoice>
invoice.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="http://www.fakenamespace.com/ns/invoices"
xmlns="http://www.fakenamespace.com/ns/invoices"
xmlns:enq="http://www.fakenamespace.com/ns/enquiriesType"
>
<xs:import schemaLocation="enquiriesType.xsd" namespace="http://www.fakenamespace.com/ns/enquiriesType" />
<xs:element name="amount">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="currency" type="xs:float" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="invoice">
<xs:complexType>
<xs:sequence> <!-- Maybe change to "all"? -->
<xs:element name="company" type="xs:string" />
<xs:element name="reference" type="xs:string" />
<xs:element name="date" type="xs:date" />
<xs:element name="enquiries" type="enq:enquiriesType" />
<xs:element name="clientbusiness">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:int" />
<xs:element name="contactname" type="xs:string" />
<xs:element name="name" type="xs:string" />
<xs:element name="address">
<xs:complexType>
<xs:sequence>
<xs:element name="street" type="xs:string" />
<xs:element name="city" type="xs:string" />
<xs:element name="postcode" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="products">
<xs:complexType>
<xs:sequence>
<xs:element name="product">
<xs:complexType>
<xs:sequence>
<xs:element name="description" type="xs:string" />
<xs:element ref="amount" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="finalamounts">
<xs:complexType>
<xs:sequence>
<xs:element name="NET">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="currency" type="xs:float" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="VAT">
<xs:complexType>
<xs:sequence>
<xs:element name="percent" type="xs:float" />
<xs:element ref="amount" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="total">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="currency" type="xs:float" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
enquiriesType.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="http://www.fakenamespace.com/ns/enquiriesType"
>
<xs:complexType name="enquiriesType">
<xs:sequence>
<xs:element name="name" type="enq:string" />
<xs:element name="phone" type="enq:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
答案 0 :(得分:0)
我发现并解决了所有问题:
我还有另一个反复出现的错误:我使用了type =&#34; xs:float&#34;而不是type =&#34; xs:string&#34;对于&#34;货币&#34;属性。