关于 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>
因此,例如,<move><T>a0</T><T>v5</T></move>
根据 xsd 文件应该是一个有效的 XML 元素。(我已经简化了实际的声明,所以这个举动可能没有意义)
背景:我正在用 C# 4.0 开发一个项目。我使用这个 xsd 文件作为项目源。当我从某个地方收到一个 XElement 时,我首先根据上面的 xsd 检查它是否有效。C# 代码工作正常。
这是我的问题(希望是一个问题,被问了三遍):
1)我想把我的声明放在一个域上。比方说aliferhat.com
。还是我想要?我为什么要这样做?我怎样才能做到这一点?我以后如何从其他地方使用该声明?
2)我会有很多类似的xsd文件。他们中的大多数将使用“平铺”定义,所以我想将“平铺”部分放在一个单独的文件中,并从其他 xsd 文件中引用该文件。我怎样才能做到这一点?系统如何知道在哪里寻找定义?
3) 这是我在项目中添加新的 XSD 文件时 Visual Studio 生成的内容:
<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 模式定义”页面,但找不到答案。任何帮助将不胜感激。