1

关于 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 模式定义”页面,但找不到答案。任何帮助将不胜感激。

4

0 回答 0