(1)前兩點都OK;第三個:
All the elements within the XML instance which do not have a prefix automatically belong to http://www.cmu.edu/ns/blank namespace as elementFormDefault is qualified
不正確。
在架構中聲明前綴並不意味着XML實例必須使用相同的前綴。 XSD文件中的任何名稱空間聲明僅適用於XSD的XML文件(因此XSD是XML,因此...)
通常,無法假定任何有前綴或無前綴元素名稱;即以下例子都是正確的。
<some xmlns="" .../>
<some xmlns="urn:tempuri-org:XSD:1" .../>
<x:some xmlns:x="urn:tempuri-org:XSD:1" .../>
唯一肯定的是,表示不合格的名稱的唯一方法是通過一個名不經前綴(即一個人不能前綴「空」的命名空間)。
elementFormDefault
控制元素名稱的形式,當一個元素在內容模型中聲明時(即不是全局的)。
(2)部分正確。部分because of elementFormDefault.
不正確。同樣,XSD只是一個模式規範; XML存在並且有其自己的規則,與XSD或任何其他模式語言無關。這裏適用的規則是XML namespaces的規則,特別是scoping。
(3)您將不得不爲每個名稱空間創建一個XSD;在每個名稱空間內,您聲明瞭學生及其內容。然後,定義人的XSD將適當地導入其他XSD和參考學生。
所以這是一個基本的設置:
Berkeley.xsd
<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema targetNamespace="urn:berkeley-org" xmlns="urn:berkeley-org" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="student"/>
</xsd:schema>
Harvard.xsd
<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema targetNamespace="urn:harvard-org" xmlns="urn:harvard-org" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="student"/>
</xsd:schema>
people.xsd
<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema targetNamespace="urn:people-org" xmlns="urn:people-org" xmlns:harv="urn:harvard-org" xmlns:berk="urn:berkeley-org" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="urn:harvard-org" schemaLocation="harvard.xsd"/>
<xsd:import namespace="urn:berkeley-org" schemaLocation="berkeley.xsd"/>
<xsd:element name="people">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element ref="harv:student"/>
<xsd:element ref="berk:student"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
的文件圖表:
一個示例XML(顯示命名空間的使用):
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<people xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:harv="urn:harvard-org" xmlns:berk="urn:berkeley-org" xmlns="urn:people-org">
<harv:student/>
<berk:student/>
</people>
Q3對於XML命名空間聽起來並不合適。這就像在編程語言類型系統中定義一個'BerkStudent'類和'HarvStudent'類。 – McDowell 2013-05-10 12:46:33
@McDowell是的,你是對的,但是我可以在XSD中爲Berkley和Harvard使用''並添加更多字段。這就像泛化/專業化關係:) –
2013-05-10 12:59:32
你正在考慮向後 - 模式不會「自動引起」實例文檔中的任何事情,這取決於你在默認名稱空間和前綴聲明中使用正確的組合使實例文檔與模式所期望的內容相匹配。 'elementFormDefault'是影響這些_expectations_的事情之一。 – 2013-05-10 18:22:28