NIEM Releases | NIEM GitHubInformation and resources for each NIEM release.http://niem.github.io/niem-releases/

国家信息交换模型 (NIEM) 是一个社区驱动的通用词汇表,可以在不同的公共和私人组织之间进行有效的信息交换。NIEM 可以通过提供一致的、可重复使用的数据术语和定义以及可重复的流程来节省时间和金钱。该站点提供信息和资源以帮助社区使用 NIEM。

创建一个NIEMIEPD第1部分:为您的NIEM交换建模NationalInformationExchangeModel(NIEM)是一个由美国政府资助的创新项目旨在促进公共领域和私有领域组织间的信息共享。该项目最初关注法律实施、公共安全和应急管理但它正在不断扩展进入其他领域。美国司法部、国土安全部以及其他美国政府部门中的新的XML创新项目将NIEM用作一个公共基础数据模型和方法学以便促进数据和软件之间的互操作性减少信息交换应用程序的设计和开发时间以及支持知识资产和技术的跨项目重用。NIEM被描述为一个框架因为它不只是用于信息交换的一个XML词汇表它包含几个组件一个基于XML的公共数据模型称为NIEM核心提供描述人员、地址、活动和组织等通用对象的数据组件。用于个别用例的更专业的XML数据模型称为域比如Justice、Immigration和EmergencyManagement。一个方法学用于使用和扩展来自公共和特定域的模型的构造块将它们转换为一个完整的信息交换称为一个信息交换包。帮助开发、验证、归档和共享信息交换包的工具。一个提供培训和支持并监督NIEM随时间的演变的治理组织。作为共4部分的文章系列的第一部分本文向您介绍NIEM展示如何使用UnifiedModelingLanguage(UML)建模一个NIEMInformationExchangePackageDocumentation(IEPD)。工作模型和最终UML模型可从下载部分获取。如何使用NIEMNIEMXML数据模型提供公共对象的构造块。一个构造块可能处于一个非常细粒度的级别比如“个人姓名”或“生日”也可能是一个更复杂的组件比如“拘捕”或“诉讼案件”。但是NIEM模型本身并不定义完整的信息交换消息比如“ArrestReport”或“SuspiciousActivityReport”。它也不指定任何特定消息类型或XML文档的根元素。要实际使用NIEM需要构建一个IEPD。IEPD从NIEM核心和域模型提取必要的元素并扩展它们来创建一个信息交换。一个IEPD包含几个工件XML模式定义在这个交换中使用的NIEM模型的子集称为子集模式。一个定义交换的根元素的模式称为交换模式。一个定义NIEM模型的扩展的模式称为扩展模式。交换文档比如UML图表、叙述性说明和样例。回页首开发一个IEPD任何信息交换项目的首要任务都是收集并分析您的需求。NIEM并不需要任何特殊的方法来定义需求因此本文不介绍这个过程。事实上本文假设您在实际创建您的IEPD之前已经对想要交换的数据元素和用于组织这些元素的消息类型有所认识。本文将从头至尾详细介绍一个简单示例最后生成一个完整的IEPD。这个示例案例研究报告将实现一个简单的涉及注册车辆的盗窃报告。假设当地司法机关将使用这个盗窃报告来通知有关各方比如DivisionofMotorVehicles或CityBicycleRegistrationBureau关于机动车和自行车的盗窃情况。在我的需求收集阶段我已经收集了关于需要共享的数据的一般信息并确定只需一种类型的消息盗窃报告。在现实中一个IEPD通常包含多个相关的消息类型。由于NIEM的一个主要目标是数据互操作性合理的做法是在从头创建一个新的IEPD之前考虑重用一个现有的IEPD。NIEM提供了一个IEPD交换所clearinghouse支持搜索由其他组织提交的IEPD。参见参考资料获取到这个IEPD交换所的链接。如果您不能找到一个符合需求的IEPD则需要构建一个。构建一个新的NIEMIEPD需要以下5步1.建模您的交换。2.将您的交换映射到NIEM数据模型。3.创建一个NIEM模型的子集以用于您的交换。4.创建交换和扩展模式来描述您的自定义组件。5.使用所有合适的工件来组装一个IEPD。本文将介绍步骤1本系列其他文章将介绍步骤2到步骤5。即使您选择重用一个现有IEPD这个系列文章也可能有助于您理解您正在使用的IEPD的内容和结构。回页首理解NIEM模型在为您的交换创建一个模型之前理解NIEM数据模型的结构是很有用的。NIEM定义了一些概念—比如类型、属性和关联—您可能已从其他数据建模范式中熟悉了这些概念。NIEM模型概念类型表示事物——无论是有形事物还是无形事物。NIEM模型中的一些最基本的类型是PersonType、ActivityType、ItemType、LocationType和OrganizationType。还有数千种类型它们使用不同的粒度水平。在其他建模范式中类型可能称为类别或实体。属性properities是类型的特性attributes。它们本身可以拥有复杂的类型。例如PersonName是PersonType的一个属性但它也可以拥有一个类型PersonNameType这个类型拥有自己的结构包含PersonGivenName、PersonSurName等。类型可以从其他类型派生出来并继承它们的属性这类似于面向对象模型中的泛型generalizations。例如ItemType是一个泛型派生出很多类型包括VehicleType、JewelryType和RealEstateType。关联指两种类型之间的关系。Incident和Person之间可能有一个关联Person和Location之间也可能有一个关联。NIEM中的关联独立于它们与之相关的类型。角色表示一种类型在一个特殊的上下文中可能拥有的临时从属关系。例如在一个盗窃事件中某个人可能充当Victim、Subject或Witness角色。augmentations是可以重用和共享的属性集。这些属性在NIEM域模型中经常使用但在您的IEPD中则使用的少一些。元数据是关于一条消息的内容的信息比如信息收集时间信息可靠程度等。NIEM在其模型中在相关数据到元数据之间进行特殊的供应。XML中的NIEM模型NIEM模型完全作为一组W3CXMLSchema文档实现。XML模式中的注释和引用用于表明某个事物是否是一个类型、一个关联等。幸运的是您不必阅读XML模式文档本身来导航这个模型NIEM提供了一些工具来以更图形化的方式搜索和导航这个模型。通常NIEM类型被实现为XMLSchema复杂类型属性为这些类型中包含的元素。清单1展示了如何使用一个ActivityType复杂类型来表示一个活动ActivityIdentification和ActivityCategoryText等属性被实现为子元素。清单1.XMLSchema中的部分NIEMActivityType实现<xsd:complexTypename="ActivityType"><xsd:complexContent><xsd:extensionbase="s:ComplexObjectType"><xsd:sequence><xsd:elementref="nc:ActivityIdentification"minOccurs="0"maxOccurs="unbounded"/><xsd:elementref="nc:ActivityCategoryText"minOccurs="0"maxOccurs="unbounded"/><!--...--></xsd:sequence></xsd:extension></xsd:complexContent></xsd:complexType>NIEM使用XMLSchema扩展进行类型派生。清单2展示了一个更具体的活动—AssessmentType复杂类型—如何从ActivityType派生而来。清单2.XMLSchema中的NIEM类型派生<xsd:complexTypename="AssessmentType"><xsd:complexContent><xsd:extensionbase="nc:ActivityType"><xsd:sequence><xsd:elementref="nc:AssessmentScoreText"minOccurs="0"maxOccurs="unbounded"/><xsd:elementref="nc:AssessmentFee"minOccurs="0"maxOccurs="unbounded"/><xsd:elementref="nc:AssessmentProgram"minOccurs="0"maxOccurs="unbounded"/><!--...--></xsd:sequence></xsd:extension></xsd:complexContent></xsd:complexType>关联是特殊的复杂类型包含对它们关联的类型的引用。清单3展示了如何实现一个人和一个活动之间的关联—ActivityPersonAssociationType。所有关联类型都是NIEM核心AssociationType的直接或间接的扩展。清单3.XMLSchema中的NIEM关联类型<xsd:complexTypename="ActivityPersonAssociationType"><xsd:complexContent><xsd:extensionbase="nc:AssociationType"><xsd:sequence><xsd:elementref="nc:ActivityReference"minOccurs="0"maxOccurs="unbounded"/><xsd:elementref="nc:PersonReference"minOccurs="0"maxOccurs="unbounded"/></xsd:sequence></xsd:extension></xsd:complexContent></xsd:complexType>回页首建模您的交换NIEM不需要您使用任何特殊方法学或图表类型来建模您的XML交换甚至根本不需要您建模。但是建模是IEPD设计中的一个重要步骤。建模过程能使需求具体化最终结果为业务和技术用户提供了有帮助的文档。这个模型还充当IEPD创建过程中的后续步骤的有用输入。选择一个模型范式使用UML工具如果您使用UML那么使用一个支持XML的UML工具比如IBM®Rational®ModelerorArgoUML将很有用因为您能够使用XML来自动生成一个映射电子表格您可以在下一步使用这个电子表格。在本文中我使用一个开源UML编辑器ArgoUML。一个好的选择是UML—特别是UML类图表—因为UML概念可以轻松映射到NIEM模型概念。当然您可以创建其他UML范式比如用例图表和序列图表来归档您的交换。本文主要关注类图表因为它对IEPD开发流程最为关键。最好首先独立创建您的初始模型不要试图使其适应NIEM模型。只有避免受到NIEM方法的影响您才能使您的模型更适合您的业务需求。在IEPD流程的后面的几个阶段经常会对初始模型进行一些微小的有意义的修改来更好地适应NIEM。但是您的模型和NIEM模型之间总是有区别的。类型和属性本文篇幅有限不能完整地介绍UML建模因此本文主要关注特定于NIEM的指针。如您所料NIEM类型由一个类别图表中的类别表示。属性properties由类的特性attributes表示。在我的示例案例研究中我确定了几个需要交换的类—例如Theft、MotorVehicle、Bicycle、Victim、Witness和TheftLocation。图1描述了这些类型及其属性。查看图1的文字版。图1.带有类型及其属性的初始UML模型指定属性的数据类型时使用XMLSchema原始数据类型很有用因为属性将最终在一个XML模式中表示且如果您使用一个公共数据类型组则可以更轻松地确定现有NIEM模型是否适合您的需求。表1列示了最常用的XMLSchema数据类型。表1.常用XMLSchema数据类型数据类型名称说明示例string任何文本字符串abc,thisisastringinteger任意大小的整数1,2decimal小数1.2,5.0dateYYYY-MM-DD格式的日期2009-12-25timeHH:MM:SS格式的时间24小时制12:05:04booleantrue/false值true,false有些属性拥有一个有效值的枚举列表也称为代码列表。代码列表值可以在UML模型中用注释描述也可以记录在系统文档的其他地方。在我的示例中为保持模型整洁我仅仅将这些值列举为拥有一个数据类型code。我将在这个IEPD流程的下一步骤中创建的映射电子表格中记录有效值。泛型和角色NIEM模型使用泛型在适当的时候您应该在您的模型中使用它们。在这个案例研究中MotorVehicle和Bicycle都是可能失窃的财产的具体种类。因此我决定添加一个更通用的Property类并从该类派生出MotorVehicle和Bicycle。这样做的话我只需定义一次SerialNumber等公共属性还能通过允许Property类关联到Theft类来简化关联。Victim和Witness似乎遵循相同的规则毕竟它们都是更具体的人员种类。但是某个人作为目击者或受害人的状态是临时的因此最好将其表示为一个角色。事实上在本例中同一个人在一个具体的盗窃案例中可以同时作为受害人和目击者。在这种情况下您将使用两个不同的角色来表示同一个人。我通过以下方法在我的模型中展示这一点添加一个单独的Person类并创建到Victim和Witness类的关联。我将这样的关联标记为RoleOfPerson以表明它们通过一个角色而不是一个常规关联相关。图2展示了添加了泛型和角色的模型。查看图2的文字版。图2.添加了泛型和角色的UML模型关系UML有三种方法来表示关系聚合aggregations、复合compositions和关联associations。聚合和复合关系通常表示“拥有”关系其中一个类隶属于另一个类。在这个示例案例研究中一个Person“拥有”一个PersonName。如果没有一个person与之关联PersonName类毫无用处。聚合和复合在NIEM中受到同等对待。在最终的XML结构中附属类将包含在其他类中。例如有一个Person元素它包含一个PersonName元素。相反关联处于两个独立存在的类之间。在这个示例案例研究中Theft和TheftLocation是两个独立的类不需要依赖对方就可以独立存在。为在您的模型中表示这些关联您可以使用泛型UML关联或者如果有额外的属性与关联本身相关那么可以对模型添加独立的关联类。无论哪种方法在这个NIEMXML结构中这些类都应表示为带有一个独立的关联元素的明确元素。这个关联元素包含与它有关的那些元素的引用—在本例中这些元素为Theft和TheftLocation。在这个示例案例研究中我使用复合来表示Person-PersonName关系用简单的UML关联来使这些类的其余部分互相相关。图3展示了添加了关系后的模型。查看图3的文字版。图3.添加了关系的UML模型选择一个根每条XML消息必须拥有一个根。通常在一个XML交换中消息有一个关注点或目的。在本例中它是盗窃报告本身。我对我的模型添加了一个TheftReport类和一个属性TheftReportDate在TheftReport和Theft之间添加了一个聚合关系表明这个盗窃报告包含一组盗窃。图4展示了完成后的UML模型。这个模型并不完美也不必完美。在整个IEPD开发过程中对模型进行反复修改是很常见的。例如在适当的时候修改结构和名称来更好地适应NIEM模型可能很有用。查看图4的文字版。图4.完成的UML模型回页首结束语本文在一个较高的层面上描述了创建一个NIEMIEPD涉及的步骤深入介绍了第一个步骤创建模型。这个步骤的结果是一个UML模型的工作草案您可以使用它来继续IEPD开发。如果您在建模过程中使用针对NIEM的概念比如角色和XMLSchema数据类型那么IEPD开发过程的其余步骤将变得更轻松。本系列下一篇文章将介绍第二步和第三步映射和划分子集您将学习如何创建一个将UML模型映射到NIEM的组件映射模板并生成NIEM模型的一个子集来匹配您的映射。

创建一个 NIEM IEPD第 2 部分: 映射和 NIEM 子集 创建组件映射模板 常用缩写词  CMT: 组件映射模板  IEPD: 信息交换包文档  NIEM: 国家信息交换模型  SSGT: NIEM 架构子集生成工具  UML: 统一建模语言  XML: 可扩展标记语言 CMT 通常在 Microsoft® Office Excel® 或其他电子表格软件比如 OpenOffice.org Calc中创建。但是CMT 可以使用任意表格格式创建。CMT 没有固定的格式但是一个典型的 CMT 最少包含以下几列  源类型UML 模型中类的名称。  源属性UML 模型中属性的名称。  数据类型属性的数据类型。  说明类型或属性的简短说明。  基数允许出现的属性的数量。  扩展指示符模型是否匹配 NIEM 模型中的一个组件。  XPath到 XML 消息中元素的路径。 有些 NIEM 实现者向 CMT 添加更多列来表示扩展 NIEM 的细节本系列第 3 部分将深入探究扩展 NIEM。 在 CMT 中记录模型 第一步是在 CMT 的前 5 列中记录 UML 模型。本系列 第 1 部分 介绍了一个简单的示例案例的 UML 图表该案例涉及报告已注册车辆的失窃情况。根据那个 UML 类图表 — 再次展示在 图 1 中 — 表 1 显示了 CMT 格式的 TheftLocation 类。为节约空间表 1 中省略了说明您可以从 下载 部分获取一个完成的示例 CMT。查看 图 1 的纯文本版本。  图 1. 第 1 部分中的 UML 模型图表     表 1. 在 CMT 中表示一个类型和一些属性 源类型 源属性 数据类型 说明 基数 TheftLocation   ...  TheftLocation Address String ... 0..1 TheftLocation City String ... 0..1 TheftLocation State String ... 0..1 TheftLocation ZipCode String ... 0..1 TheftLocation CountyCode CountyCode ... 0..1 在数据类型列中使用了 XML Schema 简单类型名称。如果是代码列表那么需要指定一个代码列表名称而有效值则记录在电子表格的另一个标签中。基数显示最小和最大出现次数其中 * 表示一个无限大的数量。 每个关联都应该在 CMT 中拥有一行并用几行来表示对该关联中涉及的类型的引用。表 2 展示了 Theft/TheftLocation 关联的一个 CMT 表示。  表 2. 在 CMT 中表示一个关联  源类型 源属性 数据类型 说明 基数 Theft / TheftLocation Assn     Theft / TheftLocation Assn Theft Reference ... 1..1 Theft / TheftLocation Assn TheftLocation Reference ... 1..1 角色类型应该使用一些引用来展示这些引用的范围涵盖角色到担任该角色的类型。表 3 中的 Witness 角色类型包含一个对 Person的引用标注为 RoleOfPerson。  表 3. 在 CMT 中表示一个角色 源类型 源属性 数据类型 说明 基数 Witness     Witness Account String ... 0..1 Witness RoleOfPerson Reference ... 1..1 回页首 搜索 NIEM 等价元素 映射交换的下一个任务是确定您的模型和 NIEM 重叠的位置并在 CMT 中记录那些元素。应该尽量重用 NIEM以便最大化与其他 NIEM 应用程序的互操作性。如果一个 IEPD 在 NIEM 模型中已存在语义上等价的组件时仍添加新组件那么这个 IEPD 就是不遵守 NIEM 的。也就是说如果数据的确不适合 NIEM那么不应该将该数据强行添加到 NIEM 中。本系列第 3 部分将解释如何向 NIEM 模型添加新组件。 由于 NIEM 模型非常大您肯定不会希望手动扫描架构来寻找匹配的组件。幸运的是有几个在线工具可用于找到 NIEM 模型中的匹配组件参见 参考资料 获取这些工具的链接  NIEM Wayfarer。使用这个工具能够搜索 NIEM 组件并以一个组件一页的方式遍历 NIEM 模型。  Schema Central。这个工具的功能类似于 NIEM Wayfarer但适用于各种 XML 词汇表而不仅仅是 NIEM。  NIEM Schema Subset Generation Tool (SSGT)。使用这个工具能够以稍微图形化一些的方式搜索并导航 NIEM 模型。一旦发现感兴趣的组件这个工具还提供生成 NIEM 子集的附加功能。 使用上述工具在 CMT 中寻找 NIEM 中可能已经存在的所有组件。例如在 Schema Central 中搜索词汇 Vehicle 时将会看到 图 2中的搜索结果页面。  图 2. Schema Central 搜索结果页面     单击 nc:Vehicle将显示 图 3 中的页面其中显示有该元素的一些一般特征以及可能的子元素的完整列表。  图 3. Schema Central 元素显示页面     所有的 NIEM 组件都有一个名称空间前缀 nc表示 NIEM Core这是其中驻留有最基本的类型的名称空间。每个域都有一个名称空间例如j 表示 Justice。可以放心地使用任何域中的 NIEM 组件只要它们与您的模型在语义上对等。不必为了使用 immigration 域中的一个元素而特意实现一个与 immigration 相关的交换。 NIEM 模型搜索指南 不管使用何种工具都可以通过以下技巧使得搜索 NIEM 模型更为轻松  比较容易的方法通常是首先寻找级别最高的类型/类在示例案例中为 Theft、Property、Location 等然后寻找适当的属性。  不要忘了搜索同义词。如果找不到 License Plate可以尝试寻找 Registration。  如果找不到具体组件可以寻找更通用的组件。NIEM 中的一些最通用的类型是 Person、Organization、Location、Activity和 Item。例如如果找不到 Theft Location可以寻找更通用的 Location 并使用 nc:Location。如果没有 Theft 的具体类型可以考虑使用更通用的 nc:Activity。  不要只搜索名称。如果将搜索范围扩展到说明和枚举可能会找到适当的类型。 寻找 NIEM 模型中的组件最初可能令人望而生畏但随着您逐渐熟悉 NIEM 模型的常用命名和构造模式搜索过程就会变得更加简单。 在 CMT 中记录 NIEM 组件  找到一个对等 NIEM 组件后应将它记录在 CMT 中的 XPath 列中。通常要使用简单的 XPath 表达式 — 元素和/或属性名称以斜杠/分隔。类型名称不需要包含在 XPath 中。使用名称空间前缀比如 nc:因为元素名称在不同的名称空间之间不一定是惟一的。 表 4 展示了 TheftLocation 的 XPath 映射。注意为了更美观较长的 XPath 映射分割为表格中的多个行但映射通常是单个字符串。  表 4. TheftLocation XPath 映射 源类型 源属性 ... Ext? XPath TheftLocation  ...  nc:Location TheftLocation Address ... N nc:Location/nc:LocationAddress /nc:StructuredAddress  /nc:LocationStreet /nc:StreetFullText TheftLocation City ... N nc:Location/nc:LocationAddress /nc:StructuredAddress  /nc:LocationCityName TheftLocation State ... N nc:Location/nc:LocationAddress /nc:StructuredAddress  /nc:LocationState USPostalServiceCode TheftLocation Zip ... N nc:Location/nc:LocationAddress /nc:StructuredAddress  /nc:LocationPostalCode TheftLocation CountyCode ... Y  XPath 中应该包含足够的步骤以便惟一地识别它。例如不要仅仅在行中放置 nc:StreetFullText 来表示 Address。有时多条路径可能会到达 NIEM 中的一个元素因此为精确起见需要完整的路径。 在本例中CountyCode 属性一个特定于州的区县代码在 NIEM 中不存在因此它需要一个扩展。因此Ext? 列设置为 Y且 XPath 目前为空白。本系列的第 3 部分将详细介绍为扩展填充 XPath 的过程。 要查看从 Theft Report 示例模型到 NIEM 的完整映射请参见 下载 部分提供的电子表格。 回页首 创建 NIEM 子集 决定在交换中使用 NIEM 的哪些组件之后就可以创建 NIEM 模型的子集其形式为一组 XML Schema 文档。由于完整的 NIEM 模型非常大、其约束非常松散因此一个 NIEM 子集是很必要的可以更精确地验证您的交换。NIEM 子集限制允许的元素和属性它们可以出现的次数以及 —在某些情况下— 它们允许的值。创建一个 NIEM 子集还能加速 XML 消息的验证因为其架构要小得多。 我们使用 NIEM SSGT 创建 NIEM 子集。图 4 中 SSGT 的初始页面包含两个窗格右边的窗格用于搜索和导航 NIEM 模型左边的窗格用于在您添加组件时显示子集。   图 4. SSGT 主页面    根据您的 CMT 执行一些搜索找到一些组件并将其添加到子集中。使用 SSGT可以选择搜索属性元素或属性名称、类型、关联或其他组件。由于 CMT 中有元素名称因此搜索属性更明智。样例搜索结果如 图 5 所示。 您可能会感到奇怪既然可以在同一个工具SSGT中执行映射和子集创建任务那么映射和子集创建为何还是两个独立的步骤使用 SSGT同时执行映射和子集创建操作是完全可能的。但是许多 NIEM 从业人员发现使用 NIEM Wayfarer 或 Schema Central 进行映射更简单它们能更清晰地显示实际或扁平的类型结构。使用 SSGT 进行导航需要更多 NIEM 知识和更多鼠标单击因此在准备好一个准确列出您想要的组件的 CMT 之后再选择使用 SSGT 能够使子集创建操作更高效。  图 5. SSGT 搜索结果页面     向子集添加属性 当显示出感兴趣的 NIEM 组件时单击 Add 将其添加到子集。然后它将出现在左边窗格中的 NIEM Schema Subset 下方如 图 6所示。 添加属性时将自动添加属性类型。例如如果添加 nc:PersonNamenc:PersonNameType 也将自动添加到子集中。显式选择的组件将以粗体形式出现在左边窗格中旁边带有一个复选框而附属组件则不以粗体显示。  图 6. SSGT 子集     SSGT 并不默认添加类型的子属性。例如如果添加 nc:PersonName它不会包含 nc:PersonGivenName 和 nc:PersonSurName 属性必须分别添加这些属性。添加它们时必须位于 nc:PersonName 上下文中以便它们比如 nc:PersonName 和 nc:PersonGivenName之间的父子关系能够得以保持。为此在 SSGT 搜索结果中展开 nc:PersonName 树并单击 nc:PersonGivenName 旁边的 Add如 图 7 所示。  图 7. 使用 SSGT 添加子元素     反之如果独立搜索 PersonGivenName 并从搜索结果添加它那么该元素将被添加但不是作为 nc:PersonName 的子元素。 图 7 还显示了添加类型的属性时可以指定基数。单击 Add 按钮上的向下箭头将显示一个下拉菜单其中显示出可能的基数。默认值是 0 到无穷大。 如果一个属性通过继承被包含那么它默认不显示在 SSGT 层次中。例如在 SSGT 搜索结果中展开 nc:Vehicle 不会自动显示映射到 Property Description 属性的 nc:ItemDescriptionText。要查看这些继承属性看单击nc:VehicleType 旁边的show inheritance 并展开包含相关属性的类型 — 在本例中为 nc:ItemType如 图 8 所示。  图 8. 使用 SSGT 添加继承属性     抽象元素和子集 NIEM 模型通常使用 XML Schema 抽象元素和替换组。例如有几种方法可以用来表示一个货物的颜色。NIEM 有一个抽象元素 —nc:ItemColor — 它不能出现在 XML 实例中的任何位置。相反它必须用几个元素中的一个来替换比如nc:VehicleColorPrimaryCode 或 nc:ItemColorDescriptionText。在 XML Schema 术语中nc:VehicleColorPrimaryCode 和nc:ItemColorDescriptionText 称为一个替换组 的成员它们的上级 是 nc:ItemColor。 抽象元素增加了创建子集的复杂性因为必须在子集中添加可替换的元素而不只是抽象元素。SSGT 使用单词 abstract 标记所有抽象元素并允许您展开它们查看可替换的元素如 图 9 所示。  图 9. 使用 SSGT 添加可替换元素     大多数日期相关类型也包含一个抽象元素 nc:DateRepresentation该元素可用 nc:Date、nc:DateTime 等替换。一个常见的错误是简单地添加一个日期相关属性比如 nc:ActivityDate而不是展开它以单击 nc:DateRepresentation然后单击 nc:Date从而使用适当的子元素。 优化子集 子集创建好之后可以使用 SSGT 的左边窗格进行修改。可以删除任何组件方法是选择组件旁边的复选框然后单击 Delete。还可以通过展开左边窗格中适当的简单类型来删除允许的代码列表值。默认情况下来自一个简单类型的所有代码列表值都包含在子集中。 还可以通过单击左边窗格顶部的 Edit Cardinality 更改基数这再给您一次机会决定父类型中允许的某个特定属性的数量。 此时您的 NIEM 子集不必完美无缺。NIEM 子集创建通常是一个反复的过程。在 IEPD 开发的最后阶段仍然可以根据需要修改并保存您的子集。 生成 NIEM 子集 要生成子集单击页面右上角的 Generate Documents。这将弹出一个类似于 图 10 的窗口其中显示了一些生成选项。选择 Save Subset Schema to a file然后选择存储位置。  图 10. 使用 SSGT 生成子集     上述操作将创建一个名为 Subset.zip 的 .zip 文件其中有一个 niem 子文件夹包含 NIEM 子集。这个文件还为每个名称空间您在 SSGT 中为名称空间选择了元素包含了一个架构文档以及所有子集都带有的几个标准架构。 只有您选择的类型包含在架构文档中并且这些类型只包含选择的属性。例如尽管 nc:PersonNameType 在整个 NIEM 模型中拥有 7 个可能的子元素且它们都拥有基数 0..*但您的子集架构将只包含 清单 1 中的内容。  清单 1. NIEM 子集中的 nc:PersonNameType      <xsd:complexType name="PersonNameType">   <xsd:complexContent>     <xsd:extension base="s:ComplexObjectType">       <xsd:sequence>         <xsd:element ref="nc:PersonGivenName" minOccurs="0" maxOccurs="1"/>         <xsd:element ref="nc:PersonSurName" minOccurs="0" maxOccurs="1"/>       </xsd:sequence>     </xsd:extension>   </xsd:complexContent> </xsd:complexType>    这个子集还包含一个名为 wantlist.xml 的 XML 文档它列出已添加到子集中的所有元素及其基数。如果稍后要进行修改这个 wantlist 很有用可以将这个 wantlist 重新上传到 SSGT修改子集然后重新生成子集。清单 2 显示了这个 wantlist 的一部分。  清单 2. 部分 NIEM 子集 wantlist      <w:WantList w:release="2.1" w:product="NIEM" ...>   <w:Element w:name="j:Person" w:isReference="false"/>   <w:Element w:name="j:Witness" w:isReference="false"/>   ...   <w:Type w:name="j:PersonType" w:isRequested="false">     <w:ElementInType w:minOccurs="0" w:maxOccurs="1"       w:name="j:PersonAugmentation" w:isReference="false"/>   </w:Type>   <w:Type w:name="j:WitnessType" w:isRequested="false">     <w:ElementInType w:minOccurs="0" w:maxOccurs="1"       w:name="j:WitnessAccountDescriptionText" w:isReference="false"/>     <w:ElementInType w:minOccurs="1" w:maxOccurs="1"       w:name="nc:RoleOfPerson" w:isReference="true"/>   </w:Type>   ... </w:WantList>

National Information Exchange Model(NIEM)操作手册相关推荐

  1. git操作手册_基本的Git手册

    git操作手册 介绍 (Introduction) Hi! I am Sanjula, and in this guide I hope to teach you a little bit about ...

  2. sicktim571操作手册_TIM中文操作手册.PDF

    TIM 中文操作手册 简介 TIM 系列激光扫描器是一款智能激光型区域扫描传感器. 得益于其小巧轻便的外形及对于激光扫描器而言极低的功耗,非常适合于AGV/RGV/机器 人及其他用于室内设备防撞及区域 ...

  3. 宝德服务器文档,宝德服务器RAID操作手册EX16650用户手册

    宝德服务器RAID操作手册EX16650用户手册 啪器5吋 EX16650用户手册 一. SuperBuild Configuration Utility 1.按F2进入BIOS ,将Quiet Bo ...

  4. 宝德服务器 raid制作,宝德服务器RAID操作手册EX16650用户手册.doc

    宝德服务器RAID操作手册EX16650用户手册 EX16650用户手册 一.SuperBuild Configuration Utility 1.按F2进入BIOS,将Quiet Boot :设置为 ...

  5. sicktim571操作手册_TIM3xx简明操作手册

    1 TIM3xx 简明操作手册 TIM3xx 系列激光扫描器是一款智能区域扫描传感器. 得益于其小巧轻便的外形及对于激光扫描器而言极低的功耗, 非常适合于 AGV/RGV/ 机器 人及其他用于室内设备 ...

  6. Pydictor字典生成器操作手册

    声明:请于合法授权环境下进行使用,请勿用于非法操作! Pydictor字典生成器操作手册 0x01 简介 pydictor 是一个使用 python 语言开发,通过命令行生成爆破字典的强大工具,包含有 ...

  7. Lustre 2.x文件系统操作手册——前言

    Lustre 2.x 版本操作手册提供安装.配置和调试Lustre文件系统的详细信息和步骤.该手册涵盖了故障处理.磁盘配额.条带和互联互通等主题.也包含了故障信息查寻处理和提高Lustre文件系统操作 ...

  8. 绝对详细的 RabbitMQ 实践操作手册(一)

    绝对详细的 RabbitMQ 实践操作手册,看完本系列就够了. 一.什么是MQ ? 1.MQ的概念 2.理解消息队列 二.MQ的优势和劣势 1.优势和作用 2.劣势 三.MQ的应用场景 四.AMQP ...

  9. 最好的程序界面就是用户无需去阅读操作手册就知道该如何使用的界面

    最好的程序界面就是用户无需去阅读操作手册就知道该如何使用的界面. 原则 1.一致性  如果你可以在一个列表的项目上双击后能 够弹出对话框,那么应该在任何列表中双击都能弹出对话框.要有统一的字体写号.统 ...

最新文章

  1. 继往开来!目标检测二十年技术综述
  2. unity安装,sdk,jdk问题
  3. mysql 已存在数据_MySQL跳过已存在的数据
  4. 牛客练习赛34 E little w and Digital Root(数位dp)
  5. 短文件名漏洞如何修复_短文件名漏洞修复
  6. centOS目录结构
  7. JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)
  8. java 自动补齐数值至指定位数
  9. JavaSpring框架有哪些优势?
  10. mac系统postman+newman生成测试报告
  11. 手机连不上电脑热点、热点连接超时、电脑热点无法被连接的问题-01
  12. 经典逻辑题:猜牌问题——网上的结论是没问题的
  13. 科学-天文学:天文学百科
  14. 软件测试面试题(二)
  15. append html 是字符串,jquery .html()vs .append()
  16. 一文了解K8s-概念详解
  17. 信息奥赛一本通1225:金银岛
  18. mic的灵敏度和声音的大小
  19. 乾坤主应用Vue2 集成子应用Vue3艰苦踩坑历程
  20. 思维导图-Freemind

热门文章

  1. tomcat执行shutdown报错Could not contact [localhost:8005] (base port [8005] and offset [0]). Tomcat may n
  2. 2021-11-11
  3. matlab上机实习报告,matlab上机实习报告.doc
  4. 视频 --- 基础概念
  5. 工程效能部门如何讲好故事做好事
  6. 联想服务器系统改成win7,联想Win8系统换成Win7的步骤
  7. 软著怎么申请?一篇文章教会你!
  8. 第七周作业:注意力机制学习的part2
  9. 普通用户 linux用tar解压文件 无法 open: 没有那个文件或目录
  10. 阿里云服务器到期会提醒吗