如何在浏览器中验证XML,或者我该怎么做呢?

时间:2015-09-13 13:22:46

标签: xml browser xsd schema

我不熟悉xsd,我从w3schools复制代码,

<shiporder orderid="889923"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
  <orderperson>John Smith</orderperson>
  <shipto>
    <name>Ola Nordmann</name>
    <address>Langgt 23</address>
    <city>4000 Stavanger</city>
    <country>Norway</country>
  </shipto>
  <item>
    <title>Empire Burlesque</title>
    <note>Special Edition</note>
    <quantity>1</quantity>
    <price>10.90</price>
  </item>
  <item>
    <title>Hide your heart</title>
    <quantity>1</quantity>
    <price>9.90</price>
  </item>
</shiporder>

xsd

<xs:element name="shiporder">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="orderperson" type="xs:string"/>
      <xs:element name="shipto">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="name" type="xs:string"/>
            <xs:element name="address" type="xs:string"/>
            <xs:element name="city" type="xs:string"/>
            <xs:element name="country" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="item" maxOccurs="1">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="title" type="xs:string"/>
            <xs:element name="note" type="xs:string" minOccurs="0"/>
            <xs:element name="quantity" type="xs:positiveInteger"/>
            <xs:element name="price" type="xs:decimal"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="orderid" type="xs:string" use="required"/>
  </xs:complexType>
</xs:element>

我将项目的maxOccurs更改为1

<xs:element name="item" maxOccurs="1">

我在浏览器中运行xml(两个项目),它仍然打印出xml,那么xsd的用法是什么?

1 个答案:

答案 0 :(得分:0)

  

我在浏览器中运行xml(两个项目),它仍然打印出xml,那么xsd的用法是什么?

XSD或XML Schema Definition提供XML的定义。要使用这样的定义,您必须使用验证处理器,例如Xerces(存在许多其他处理器)。

它的典型用例是在双方之间交换数据。为了确保数据符合他们同意的格式,他们用某种模式语言描述XML结构的格式:

最常见的是,在使用SOAP协议编写Web服务时会发现这种情况,SOAP协议通常在XSD中定义其类型。如果您通过其定义文件(通常是WSDL)导入Web服务,则可以将其自动转换为可立即使用的POJO或POCO类(表示对象模型的类),这对创建业务逻辑非常有帮助。

对于存在数据发送和接收端的任何情况,如果接收方可以在进行之前验证XML是否符合模式中定义的数据模型,那么这是一个很大的优势。假设您有一个字段birth-date,并且发件人发送"fourth of july 1977",验证程序可能会引发错误,警告用户出现问题并允许系统gracefully degrade

浏览器与模式没有任何关系,至少不会将其报告给用户,因为他们试图在他们接受的内容中保持自由,因为很多人创建的HTML不符合要求,但仍然应该以某种方式显示。

另一个显而易见的用途是标准化。例如,DocBook格式is defined in RelaxNGOpenDocument format一样。这些在XSD中定义:XSLT(尽管是非规范性的),XSD itselfWSDLSMIL,所有Office Open XML formats,SOAP的所有部分(此处为the envelope schema)。等等,列表很长。