XML Schema声明如何工作并相互引用?

时间:2012-05-03 14:23:46

标签: c# .net xml xsd

我对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:xstargetNamespace属性有什么作用? xs:element是否真的在其中一个URI中定义了? C#编译器是否真的查找定义的URI?

我希望并猜测我只问过一个问题。我已经阅读了W3学校的“XML模式定义”页面,但找不到答案。任何帮助将不胜感激。

0 个答案:

没有答案