XML 构建器基于 XML 文件运行。本主题旨在介绍必须如何构建 XML 文件才能使 XML 构建器将它们正确解码。
关于 XML 和 XSD 文件
“可扩展标记语言”(XML) 与“超文本标记语言”(HTML)相类似。HTML 文件同时包含有关该文件呈现方式的数据和信息。XML 只包含数据。
XML 数据嵌入在用于添加含义的标记内。例如,<price> 24 </price> 声明数字 24 是价格。在 XML 术语中,此价格称为元素。其他元素可能是产品名称、数量或总计。尽管用户可以查看 XML 标记并确定 24 是价格,但更重要的是,软件可以从文件中提取价格元素,而对于 HTML 文件则无法做到这点。
XML 文件基于“XML 模式定义”(XSD) 而构建。XSD 文件可提供语法并定义各元素与属性在 XML 文档中的呈现方式;它将为某种类型的 XML 文档定义一些约束,例如,可以显示哪些元素和属性以及它们相互之间的关系是什么、这些元素和属性中可以包含哪些类型的数据等等。
XMLBuilderDiagram XSD 文件详述
XMLBuilderDiagram XML 模式是为可以通过“ArcGIS Schematics XML 构建器解码的 XML 文件提供语法的 XML 模式。默认情况下,该 XSD 文件的安装位置是 \ArcGIS\Schematics\XMLSchema。
与 XML 构建器兼容的 XML 文件都以 Diagrams 标记开头和结束:
<Diagrams> 标记内的元素
<?xml version="1.0" encoding="utf-8"?> <sch:Diagrams xmlns:sch = 'http://www.esri.com/schemas/ArcGIS/10/Schematics' xmlns:xsi = 'http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.esri.com/schemas/ArcGIS/10/Schematics XMLBuilderDiagram.xsd'> ... </Diagrams>
XML 文件可以存储多个逻辑示意图;每个逻辑示意图的定义都以 Diagram标记开头:
<Diagram> 标记内的元素
<?xml version="1.0" encoding="utf-8"?> <sch:Diagrams xmlns:sch = 'http://www.esri.com/schemas/ArcGIS/10/Schematics' xmlns:xsi = 'http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.esri.com/schemas/ArcGIS/10/Schematics XMLBuilderDiagram.xsd'> <Diagram DiagramTemplateName="All" DiagramName="All" EnforceDiagramTemplateName="false" EnforceDiagramName="false"> ... </Diagram> </Diagrams>
DiagramTemplateName 与 DiagramName 是可选参数。当 EnforceDiagramTemplateName 或 EnforceDiagramName 参数为“假”时,需要在“新建逻辑示意图”对话框中重新定义逻辑示意图模板名称和逻辑示意图名称。
这样,对于每个逻辑示意图都会显示以下数据节:
- 逻辑示意图的第一个可用标记是 PropertySet,可以使用它来定义与该逻辑示意图相关的属性值。此数据节不是必需的:每个与 PropertySet 相关的属性值都是以 PropertySetProperty 标记开头,其中的 Key 项和 Value 项为考量元素。可以指定若干个 PropertySetProperty 项:
<PropertySet> 标记内的元素
<Diagram EnforceDiagramTemplateName="false" EnforceDiagramName="false"> <PropertySet> <PropertyArray> ... </PropertyArray> </PropertySet> ... </Diagram>
Key 标记用于定义属性名称,而 Value 标记是属性值。<PropertySetProperty> 标记内的元素
<PropertySet> <PropertyArray> <PropertySetProperty> <Key>Country</Key> <Value>CALIFORNIA</Value> </PropertySetProperty> <PropertySetProperty> ... </PropertySetProperty> </PropertyArray> </PropertySet>
- 逻辑示意图的第二个可用标记是Datasources,它用于详细说明可能与逻辑示意图及其内容相关的所有数据源。
<Datasources> 标记内的元素
<Diagram EnforceDiagramTemplateName="false" EnforceDiagramName="false"> ... <Datasources> ... </Datasources> ... </Diagram>
每个 Datasource 定义都基于两个必需项:NameString 和 WorkSpaceInfo;NameString 是数据源名称,而 WorkSpaceInfo 用于对定义数据源类型和连接属性的参数(PathName、BrowseName、WorkspaceFactoryProgID、WorkspaceType 和 ConnectionProperties)进行重新组合。
<Datasource> 标记内的元素
<Datasources> ... <Datasource> <NameString>XMLDataSource</NameString> <WorkSpaceInfo> <WorkspaceFactoryProgID>esriDataSourcesGDB.AccessWorkspaceFactory</WorkspaceFactoryProgID> <PathName>C:\ArcGIS\ArcTutor\Schematics\DatasetEditor\XMLDataAssociatedFeatureClasses.mdb</PathName> </WorkSpaceInfo> </Datasource> ... </Datasources>
- 最后一个出现的数据节是 Features,用于详细说明逻辑示意图中的所有逻辑示意图要素。
由于逻辑示意图中能够显示四种逻辑示意图要素(结点、连接线、连接线上的结点和子连接线),因此在此数据节中可以定义四种标记:NodeFeature、LinkFeature、NodeOnLinkFeature 和 SubLinkFeature:
<Features> 标记内的元素
<Diagram EnforceDiagramTemplateName="false" EnforceDiagramName="false"> ... <Features> <NodeFeature> ... </NodeFeature> ... <LinkFeature> ... </LinkFeature> ... <NodeOnLinkFeature> ... </NodeOnLinkFeature> ... <SubLinkFeature> ... </SubLinkFeature> ... </Features> </Diagram>
- 无论要素元素的类型是什么,都有两个特定属性是要素元素的必需属性:FeatureClassName(表示在逻辑示意图中实现此逻辑示意图要素的逻辑示意图要素类的名称)和 ExternalUniqueID(相当于逻辑示意图要素标识符)。
- 然后,可以找到要素元素的几个可选参数,例如:DatasourceName、UCID、UOID 和 USID(如果 GIS 要素/对象与逻辑示意图要素相关,则是 DatasourceName 数据库中关联的 GIS 要素/对象的 ClassID、ObjectID 和子类型 ID);RelatedContainerID(逻辑示意图要素容器的 ID)和 PropertySet(详细说明与逻辑示意图要素相关的所有属性值)。
- 某些特定属性是逻辑示意图要素的可选属性或必需属性,这具体要取决于逻辑示意图要素的类型:
- 对于 NodeFeature 类型,还可以设置 InitialX 和 InitialY 可选属性来指定逻辑示意图要素的 x 坐标和 y 坐标:
下面是 NodeFeature 元素的示例:
<NodeFeature> 标记内的元素
<NodeFeature> <FeatureClassName>Stations</FeatureClassName> <ExternalUniqueID>Station-1</ExternalUniqueID> <DatasourceName>XMLDataSource</DatasourceName> <UCID>1</UCID> <UOID>1</UOID> <RelatedContainerID>Container-1</RelatedContainerID> <InitialX>-4462</InitialX> <InitialY>2828</InitialY> <PropertySet> <PropertyArray> <PropertySetProperty> <Key>Feeder</Key> <Value>1</Value> </PropertySetProperty> <PropertySetProperty> <Key>Name</Key> <Value>WABY</Value> </PropertySetProperty> <PropertySetProperty> <Key>Capacity</Key> <Value>1</Value> </PropertySetProperty> <PropertySetProperty> <Key>Type</Key> <Value>A</Value> </PropertySetProperty> </PropertyArray> </PropertySet> </NodeFeature>
- 对于 LinkFeature 类型,FromNode 和 ToNode 属性是必需属性。它们必须引用与起始结点和末端结点相关的 NodeFeature 标识符。还可以用 Vertices 标记指定连接线上可以显示的一组折点,每个折点都以 x 坐标和 y 坐标显示。
下面是 LinkFeature 元素的示例:
<LinkFeature> 标记内的元素
<LinkFeature> <FeatureClassName>LV_Lines</FeatureClassName> <ExternalUniqueID>LVLine-52</ExternalUniqueID> <DatasourceName>XMLDataSource</DatasourceName> <UCID>5</UCID> <UOID>52</UOID> <FromNode>Station-33</FromNode> <ToNode>Station-45</ToNode> <PropertySet> <PropertyArray> <PropertySetProperty> <Key>Rate</Key> <Value>452456</Value> </PropertySetProperty> <PropertySetProperty> <Key>Category</Key> <Value>S</Value> </PropertySetProperty> </PropertyArray> </PropertySet> <Vertices> <Vertex> <X>-562.37451</X> <Y>-2935.90906</Y> </Vertex> <Vertex> <X>-192.067429999999</X> <Y>-3254.90854</Y> </Vertex> <Vertex> <X>509.88013</X> <Y>-3298.78026</Y> </Vertex> </Vertices> </LinkFeature>
- 对于 NodeOnLinkFeature 类型,ReferenceLink 和 InitialPosition 是必需属性。ReferenceLink 用于指定与连接线上的结点相关的 LinkFeature 标识符,InitialPosition 用于指定结点在其关联的连接线上的绝对位置或相对位置。
下面是 NodeOnLinkFeature 元素的示例:
<NodeOnLinkFeature> 标记内的元素
<NodeOnLinkFeature> <FeatureClassName>NOL</FeatureClassName> <ExternalUniqueID>N1</ExternalUniqueID> <DatasourceName>myDS</DatasourceName> <InitialPosition>0.5</InitialPosition> <ReferenceLink>L1</ReferenceLink> </NodeOnLinkFeature>
- 对于 SubLinkFeature 类型,ReferenceLink、FromNode 和 ToNode 是必需属性。ReferenceLink 用于指定与子连接线相关的 LinkFeature 标识符,而 FromNode 和 ToNode 则引用与子连接线起始结点和末端结点相关的 NodeFeature 标识符。
下面是 SubLinkFeature 元素的示例:
<NodeOnLinkFeature> 标记内的元素
<SubLinkFeature> <FeatureClassName>LOL</FeatureClassName> <ExternalUniqueID>S1</ExternalUniqueID> <DatasourceName>myDS</DatasourceName> <FromNode>N1</FromNode> <ToNode>R2</ToNode> <ReferenceLink>L1</ReferenceLink> </SubLinkFeature>
- 对于 NodeFeature 类型,还可以设置 InitialX 和 InitialY 可选属性来指定逻辑示意图要素的 x 坐标和 y 坐标:
XMLBuilderDiagram 数据模型
下图显示的是 XMLBuilderDiagram 文件的 XML 模式定义:
基于 XMLBuilderDiagram XSD 文件的 XML 文件示例
下图显示的是一个基本 XML 文件示例,其中对一个包含唯一结点逻辑示意图要素的逻辑示意图进行了描述:
下图显示的是对含有一个连接线逻辑示意图要素的逻辑示意图进行描述的 XML 文件的示例摘录:
要获取基于“XMLBuilderDiagram XML 模式定义”文件的更详细的 XML 文件示例,请打开“教程”设置中的 SampleNetworkData.xml 文件。该文件的安装位置是 C:\ArcGIS\ArcTutor\Schematics\Schematics_Configuration\XML_Data。