先来看一个schema book.xsd
<?xml version="1.0" encoding="UTF-8" ?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" tagetNamespace="http://www.sfg.cn" elementFormDefault="qualified">
<element name="书架"> ------>定义一个标签
<complexType> ------>复合类型 就是该标签含有子标签
<sequence maxOccurs="unbounded"> ------>含有不限定个数的子标签
<element name="书"> ------>定义一个子标签
<complexType>
<sequence>
<element name="书名" type="String" /> ------>定义一个文本子标签
<element name="作者" type="String" />
<element name="价格" type="String" />
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
这都很容易明白,这里重点需要说的是
xmlns="http://www.w3.org/2001/XMLSchema"
tagetNamespace="http://www.sfg.cn"
schema规范
规范1:所有的标签和属性都需要有定义
疑问:schema也是一个标签,那么schema是由谁定义的?
规范2:所有的schema文件都要有一个命名空间namespace
疑问:schema的namespace在哪里指定?
tagetNamespace="http://www.sfg.cn" 属性指定schema的namespace,值为一个URL, URL可以是不存在的。
这里又回到了第一个疑问tagetNamespace、schema是谁定义的,这个时候就需要引入名称空间。
疑问:如何引入namespace来约束tagetNamespace、schema?
xmlns="http://www.w3.org/2001/XMLSchema" 这个属性是用来引入namespace的,值是固定的,W3C已经固化到解析器中
附加说明:elementFormDefault是一个枚举值,说明namespace默认只关联了根标签
根据以上的schema知道XML的格式为:
<书架>
<书>
<书名>文本</书名>
<作者>文本</作者>
<价格>文本</价格>
</书>
</书架>
xmlns="http://www.sfg.cn“ 在XML中也要引入schema中定义标签的命名空间
规范3:如果引入的schema不是W3C组织定义,必须指定schema文件的位置
疑问:schema的位置由谁来指定?
schemaLocation="http://www.sfg.cn book.xsd" 属性值格式为: namespace值 + 空格 + schema文件名
疑问:该XML文件中的schemaLocation属性又是由谁来引入的呢?
xmlns="http://www.w3.org/2001/XMLSchema-instance"
疑问:这个时候引入了两个namespace,两个相同属性xmlns,解析器不知道schemaLocation属性由谁来约束?
这里就需要对其中一个进行别名 :xmlns:dd="http://www.w3.org/2001/XMLSchema-instance" 别名为dd,那么后面这个namespace来约束的,就需要别名来引导 dd:schemaLocation="http://www.sfg.cn book.xsd"
得出XML的内容如下
<书架 xmlns="http://www.sfg.cn“
xmlns:dd="http://www.w3.org/2001/XMLSchema-instance"
dd:schemaLocation="http://www.sfg.cn book.xsd">
<书>
<书名>文本</书名>
<作者>文本</作者>
<价格>文本</价格>
</书>
</书架>
 
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号