我对Xml Schema声明有些不了解。我在.xsd文件中有以下声明:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="tile">
<xs:restriction base="xs:string">
<xs:pattern value="[a-z][0-9]"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="move">
<xs:complexType>
<xs:sequence>
<xs:element name="T" type="tile" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
因此,例如,根据xsd文件,<move><T>a0</T><T>v5</T></move>
应该是有效的XML元素。 (我已经简化了实际的声明,所以此举可能没有意义)
背景:我正在使用C#4.0开发一个项目。我使用这个xsd文件作为项目源。当我从某处收到XElement时,我首先根据上面的xsd检查它是否有效。 C#代码工作正常。
这是我的问题(希望有一个问题,问了三次):
1)我想把我的声明放在一个域上。我们说aliferhat.com
。或者我想要?我为什么要这样做?我怎样才能做到这一点?我怎样才能在以后的其他地方使用该声明?
2)我将有许多类似的xsd文件。他们中的大多数将使用“tile”定义,所以我想将部分“tile”放在一个单独的文件上,并从其他xsd文件中引用该文件。我怎样才能做到这一点?系统如何知道在哪里寻找定义?
3)这是Visual Studio在向项目添加新的XSD文件时生成的内容:
<xs:schema id="temp"
targetNamespace="http://tempuri.org/temp.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/temp.xsd"
xmlns:mstns="http://tempuri.org/temp.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
</xs:schema>
xmlns:xs
和targetNamespace
属性有什么作用? xs:element
是否真的在其中一个URI中定义了? C#编译器是否真的查找定义的URI?
我希望并猜测我只问过一个问题。我已经阅读了W3学校的“XML模式定义”页面,但找不到答案。任何帮助将不胜感激。