主题中的问题:“xmlvalidator” https://knowledge.亚搏在线safe.com/questions/topics/single/572.html网站 主题“xmlvalidator”的最新问题 UKGEMINI2元数据验证 https://knowledge.亚搏在线safe.com/questions/72486/ukgemini2-metadata-validation.html

嗨FME一代,

我想构建一个工作区来生成和验证UK GEMINI 2.2元数据。我可以使用模板生成xml,并从该特性更新所需的元素。然而,验证它正是我被困住的地方。使用两个ISO19139模式和GEMINI schematron验证xml。这些在Github上提供:

ISO 19139 XSD模式(Eden 2009-03-16)

ISO 19139表A.1约束示意图(Medin/Parslow 1.4)

双子座2.1 Schematron 1.3

我对xml模式和schematron非常陌生。我认为一系列的XML验证器可以做到这一点,但我不知道如何配置它们。

FME Land之前有谁做到过这一点吗?

非常感谢,

大卫·麦克德莫特

xml 元数据 验证 xmlvalidator 架构验证 星期五,2018年6月15日09:58:19格林尼治标准时间 戴姆麦克德莫特
无法使用XML验证器验证XML,命名空间问题? https://knowledge.亚搏在线safe.com/questions/71596/unable-to-validate-xml-using-xml-validator-namespa.html

嗨,我在验证某些XML时遇到问题,我始终没有发现元素特性错误的声明。

这是XSD的第一部分

       

       
	
         
		
          
			
          
         
        
       

这是XML的开头

       

       
	
        
       

它抱怨

找不到元素“features”的声明

但是,即使我删除了features元素,它的其余部分仍然有类似的错误。在研究了一些类似的问题之后,我现在怀疑这与名称空间有关,但即使我将它们移动到XML中,它似乎也无法解析。

功能是否由

我必须对XML中的XSD中的名称空间做什么?

谢谢你的帮助。

xml xmlvalidator 星期五,2018年6月01日11:49:13格林尼治时间 蓝精灵
使用XMLValidator根据模式验证GML文件 https://knowledge.亚搏在线safe.com/questions/49820/validating-a-gml-file-against-a-schema-using-xmlva.html

我想根据模式测试我的GML文件,以确保它是有效的。要做到这一点,我正在使用一个XMLvalidator转换器。我不确定它是如何工作的。

当我为我的GML文件添加一个阅读器时,它加载所有不同的功能类型。我还选择了包含我的模式的.xsd文件。将它们连接到xmlvalidator的过程非常缓慢,而且似乎一切都失败了。

如果我选择我的GML文件作为XMLValidator的“XML Filename”参数,然后我的.xsd文件作为模式位置(验证类型“Syntax and Schema”,然后断开特征类型读卡器的连接,它似乎起作用了,但是我已经将检查程序连接到了xmlvalidator上的“通过”和“失败”端口上,并且似乎没有任何东西经过它们,即使工作台运行成功。我用得对吗?

xml gml xmlvalidator 星期二,格林尼治时间2017年8月08日15:12:06 iboates
使用xmlTemplater和xmlValidator Transformers创建和验证XML文档(FME 2011-2012) https://knowledge.亚搏在线safe.com/articles/1145/creating-and-validating-xml-documents-with-the-xml.html

下载

背景

快速回顾FME XML术语可能会有所帮助,因为其中有很多是新的:

XQuery是一种脚本语言,用于读取和查询XML以构建属性和记录(与XML读取相关)。Xfmap提供了另一种方法,可以用来执行相同的功能。

XMLTemplater是一个合并工具,它允许您将FME属性合并到一个XML模板中,以构建XML文本,供文本文件编写器编写(与XML编写相关)。
fme 2010示例用于循环处理将fme特性列表合并到XML模板中。现在在FME 2011中这要容易得多,因为我们添加了一个列表功能。所以在2011年,你现在有四个圣殿武士功能:

  • fme:get属性(“”)
  • 获取列表属性(“”)
  • fme:get xml属性(“”)
  • fme:get xml list属性(“”)
  • GET XML允许您检索自身包含XML文本/标记的属性。否则<,>成为< > >


get list属性函数将获取一个FME列表,并在函数的位置将所有列表值连接在一起。这减少了在模板中使用for循环代码的需要。

基本的例子

从简单的事情开始,然后在此基础上进行构建总是好的。为此,我将以一个基于xfmaps基本示例的示例数据集为例(如果您已经使用xfmaps阅读XML,那么这是很熟悉的)。注意,这个工作区需要FME 2011或更高版本才能运行(FME:get-xml-list-attribute(),XMLFormatterXMLvalidator在FME 2011中是新的)。我强烈建议在处理XML时使用FME 2011,因为最近有许多增强功能可以帮助您。

此工作区读取示例csv文件并生成具有特定架构的XML文件。它使用一个XMLTemplater构建特性xml,另一个XMLTemplater将特性组装到数据集xml中。这是因为层次结构或嵌套的每一个不同级别都需要另一个XMLTemplate—特别是在父级和子级之间存在一对多关系的情况下。XML模板嵌入到XMLTemplaters中,虽然也可以在外部维护。

基本工作流程亚搏在线

  1. 阅读CSV
  2. 为每个记录构建特性XML—XMLTemplater_features转换器。功能模板包含所需的目标XML结构和fme:get-attribute()命令,无论我们想在何处插入fme属性值。
  3. 生成功能列表
  4. 将功能列表插入到数据集XML模板-xmlTemplater_数据集转换器中。dataset模板包含XML文档的页眉和页脚,以及一个fme:get-xml-list-attribute()命令,用于将所有预合并的XML特性插入到数据集中。
  5. 在输出-xmlformater之前打印并验证XML,XML验证程序
  6. 使用文本文件编写器编写,因为这是无模式的,并且允许我们编写我们创建的任何XML (XML泛型编写器目前仅限于平面表)。

为了了解它是如何工作的,查看源代码csv很有帮助,模板及其生成的输出XML。

输入CSV

这是源CSV文件。请注意,它包含一个ID,边界框坐标,然后是名称,城市和日期范围。所以它既有属性也有隐含的几何。
ID,_xmax,_xmin,_ymax,_ymin,_zmax,_zmin,name,city,end,start101,-122.9,-123.1,49.25,49.15,0,0,John,温哥华,12-11-09,11-22-99102,-122.5,-122.8,49.12,49,0,0,六月,萨里,9-15-10,02-25-05

目标XML

下面是我们感兴趣的目标XML模式。注意,这是一个带有一条记录的示例数据集,不是XSD文件。我们需要一个示例XML数据集来显示l数据结构的实例。从xsd生成数据实例实际上是一个复杂的过程,因此,如果您没有样本数据来建模之后的模板,您可能需要XMLSpy之类的工具来生成示例实例数据或联系人 技术支持.
       

       
   
        
     
         
          约翰
         
     
         
          温哥华
         
     
         
       
          
           11-22-99
          
       
          
           12-11-09
          
     
         
     
         
       
          
           -123.1、49.25-122.9、49.15
          
     
         
   
        

       

特征模板

基于此,我们现在可以创建特性和数据集模板。对于功能模板,我们只需要复制与输入csv中的功能记录对应的XML部分。通常这是XML中重复的部分,因为我们通常每个数据集有多个特性。
       
  
        
         {fme: get-attribute(“名字”)}
        
  
        
         fme:get属性(“城市”)
        
  
        
       
         
          {fme: get-attribute(“开始”)}
         
       
         
          fme:get属性(“end”)
         
  
        
  
        
     
         
          {fme: get-attribute (_xmin)}, {fme: get-attribute (_ymax)} {fme: get-attribute (_xmax)}, {fme: get-attribute (_ymin)}
         
  
        

       

注意,我们已经用FME函数替换了字段值,FME函数在将值输入XMLTemplater时从每个特性动态插入值。还要注意,围绕这些函数的结构可以像您希望的那样复杂。例如,我不需要使用额外的模板来构建框的几何形状,因为每个特性只有一个,所以我可以将整个几何结构连同属性一起插入到特征模板中。

数据模板

数据集模板只需要将所有功能XML连接在一起,并将其插入到数据集结构中。正如上面提到的,这比之前容易得多,因为您所要做的就是构建一个特性列表,然后使用fme:get-xml-list-attribute()命令将该列表读取到数据集模板中。
       
 
       
        {fme: get-xml-list-attribute (“_list {} feature”)}
       


注意,XML文档的页眉/页脚可以像您希望的那样复杂。通常情况下,还包括编码信息,名称空间声明,也许还有一些创作文档。为了简单起见,这里不包括这个。

格式和验证

在这个例子中,我们在输出之前格式化XML。这使它更容易阅读,以防我们的连接过程干扰了空格,回报等。我们还使用XMLValidator检查XML语法的有效性。这有两个设置:仅语法或语法和应用程序模式。由于我们没有应用程序模式,所以无法对其进行验证,但如果我们这么做了,最好确保这也是有效的。

其他注意事项:

-对于每种功能类型,通常在数据集模板中有一个fme:get-xml-list-属性。然而,如果你有一个高度嵌套的结构,一种功能类型可能需要存储在另一种功能类型中。在这种情况下,您需要在每个级别上都有一个新的xmlTemplate,例如:
数据集模板|——父特性类型的XML模板|——子特性类型的XML模板


构建几何图形也是如此。您可能需要使用单独的模板来构建XML几何图形,然后使用fme:get-xml-attribute命令将其插入到功能模板中。

-您可以使用GeometryExtractor转换器将您的特征几何提取为XML,GML 3.1.1,GML 3.2.1之上,GeoJason等,以便您更容易地将其插入到您的功能模板中(其中一些提取类型是2011年新出现的)。

xml XMLTEMPLAR xmlvalidator 结婚,2016年6月08日15:23:39格林尼治时间 natalieat亚搏在线safe
AIXM 4.5和5.1读数,编写和验证-欧盟机场演示 https://knowledge.亚搏在线safe.com/articles/1312/aixm-xml-and-gml-formats-eu-airports-demo.html

介绍

艾希姆航空信息交换模型格式。FME支持读写AIXM版本4.5(XML)和AIXM版本5.1(GML)。编写AIXM 5.1需要FME 2014或更新版本。下面将介绍这些版本中的每一个。还包括编写AIXM5 AirportHeliports的示例。

下载

  • AIXM5writing_EUairportsDemo_v1.0.zip
  • AIXM 4.5 XML

    AIXM4.5是一种复杂的基于XML的格式,旨在支持航空信息服务(AIS)。AIXM 4.5不包含显式几何,而是建立在非几何特性与ge陇和geoLat属性之间的关系之上。考虑到模式的复杂性和地理信息的存储方式,典型的GIS数据和AIXM 4.5之间的数据转换涉及许多转换步骤,通常需要熟悉AIXM数据模型复杂性的FME专家和专家的帮助。阅读AIXM 4.5很简单,但仅生成从geolong和geolat属性值派生的非几何特征和点特征。不能生成从父对象关系派生的线性和区域特性。

    AIXM 5 GML

    AIXM 5取代了AIXM 4.5,是基于GML的。因此,最好将其视为与4.5完全不同的格式。它还意味着所有几何图形都由有效的GML构造组成。GML对象可以用现有的GML库读写。这大大简化了使用AIXM数据以及在GIS和AIXM数据结构之间转换的过程。AIXM5仍然是一个非常复杂的模式,因此使用这种格式编写仍然需要熟悉AIXM标准的专家的支持。阅读AIXM 5.1只需要选择源数据集和选择AIXM5阅读器。请注意,支持AIXM 5.0和5.1版本。

    读取aixm5 gml

    阅读AIXM通常只需要指向源数据并选择AIXM格式。如果没有正确定向,您可能需要选择轴顺序。您还可以选择将复杂属性映射为XML片段,然后使用扁平化选项(用空字符串替换列表大括号)使从多个映射更容易,将元素嵌套到关系结构中,如在GIS中。要保留XML结构,请将Map复杂属性的默认读取器设置保留为“嵌套属性”。对于schema,show feature types from:'dataset only with attributes merged from schema'通常会产生最佳结果。

    AIXM5 GML写作

    要写入aixm5数据,添加一个AIXM5编写器并选择要编写的主题。FME将这些目标特性类型放在工作区中,基于AIXM模式。然后是FME数据重组和模式映射的问题,以支持目标AIXM模式。您的第一步将是决定要向哪个目标特性类型写入。从简单的开始并选择一些元素类型通常是个好主意。例如,如果要创建机场AIXM数据集,你可以从跑道开始,以及支持它所需的特性类型。要做到这一点,您需要添加aixm编写器,然后导入与跑道相关联的所有功能类型。所以你可以从写跑道开始,RunwaysTimeslice,加上aixmbasicmessage,它是文档容器。注意,您不能创建用户定义的字段或特性类型。您必须导入目标模式并重新构造数据以精确匹配该模式。

    为了成功完成这一转变,您需要根据必需字段理解AIXM模式需求,id、父母/子女关系,nillable字段等。通常,AttributeCopiers用于进行模式字段映射,attributeCreator用于定义默认值,和用于值映射的attributeValueMapper。SchemaMapper可以使用存储在csv或excel表中的外部crosswalk表跨多个特性类型完成所有这些操作。接下来的挑战是构造正确的几何结构。geometrypropertiesiters用于设置正确的几何体名称,比如gml_id,和聚合器来组装复杂的几何聚合体。参见所附的EU机场编写示例。一个读取AIXM5数据并将其写回的工作区恰好需要0个转换器。AIXM5读写器支持AIXM所需的所有复杂性,如嵌入式几何特性(用于ids材料类型等),每个特征有多个几何形状,嵌套功能,重复元素,nillable元素。我们还简化了gui和工作区参数,使它们更易于使用。注意,如果您希望使用新的草稿模式,你可以用更新过的版本覆盖FME,或者使用GML写入器。请注意,GML读卡器将检查任何给定GML文件上的名称空间,并使用该名称空间确定要使用的读卡器,因此,GML阅读器也可以用来读取AIXM数据。FME的AIXM读写器也支持AIXM扩展,这些扩展通常由主要航空管理机构(例如联邦航空局或欧洲管制局)。这些附加模式可以在应用程序模式参数下引用,它们本身应该引用并与AIXM父模式兼容。

    验证

    如果不能验证输出,那么编写AIXM GML没有多大意义。在FME基金我们使用XMLvalidator转换器来实现这一点。它使用Apache Xerces库进行验证,所以你知道结果是客观的。最简单的方法是创建一个新的工作区,添加一个创建者,然后XMLValidator。将xmlvalidator指向要测试的XML文件和要针对其进行验证的aixm应用程序架构的xsd文件。将xmlvalidator的输出连接到记录器。运行工作区并检查日志,以查看XML是否有效。否则,您将得到一份完整的报告,列出与AIXM模式相关的XML问题。注意,XMLValidator也只有语法验证模式。
    当构建一个新的工作空间时,您首先会得到许多验证错误。为了帮你解决这个问题最好将输出限制为一个或两个特性。

    需要注意的一些问题:
    -确保每个特征和几何图形都有唯一的id。

    - gml_id必须以字母字符开头。一般建议使用简短的对象类型缩写作为根特性gml_id的前缀。例如,如果根id = 101,您可以使用AH_101作为机场直升机场的功能gml_id,机场直升机场时间段GML-ID的AHTS U 101,机场直升机场时间片arp点gml_id的aharp_101。

    -如上,在大多数情况下,几何图形也需要gml_id。
    -定义aixmbasicmessage之间正确的父/子ID关系,以及你所写的元素。
    -可能需要大写名称
    -添加任何缺少/必需的属性和几何特征
    -警告消息可能会说“element not allowed”(不允许元素),实际上它的意思是您缺少一个需要先出现的元素,或未能编写所需的父元素。

    示例1:AIXM到AIXM往返

    您可以使用您选择的任何AIXM5数据集,并设置一个读取和写入它的工作区,从而自己测试它。打开Data Inspector中的输出,查看输出是否包含所有内容。然后检查以确保结果针对aixmbasicmessage.xsd进行验证。注意,如果您的输出没有验证,首先要检查的是输入是否有效。如果您的输入数据无效,FME将不会自动修复它。还要注意,如果你想写一个特定的aixm主题,一个好的第一步仍然是获取一些样本数据。然后您可以将AIXM5创建为AIXM5工作区并记录结果。这将向您展示您需要生成的FME功能的结构,以便驱动您的AIXM5 GML编写器。

    示例2:将机场激发到AIXM AirportHeliports

    所附示例显示了如何读取INSPIRE运输网络机场和编写AIXM AirportHeliports。附件包括来源激励GML,工作区和输出AIXM5 GML,所以你也可以用这个来测试AIXM阅读器。

    工作区说明了编写aixm所需的主要转换步骤(也在上面的aixm编写部分中描述):

    • 请阅读Inspire AeroromeNodes和Aerorometypes。
    • 通过inspireLocalID连接这两个输入,以便向机场节点添加机场类型。
    • 生成任何必需的唯一ID
    • 根据目标aixm模式(模式映射)所需的内容创建和复制字段
    • 创建机场点几何图形,包括设置几何名称(ARP)和traits (gml_id gml_object_name)
    • 创建一个包含机场点的聚合几何图形。将几何体命名为“ResponsibleOrganization”,并设置特征“gml_id gml_object_name theOrganizationAuthority.xlink_href”和“TheOrganizationAuthority.owns”
    • 分支(复制)特性流来填充三个必需的AIXM目标特性类型:AIXMBasicMessage(文档容器特性),机场货柜码头(机场货柜设施)和AirportHeliportTimeSlice(机场几何特征)。我们感兴趣的大部分数据都属于AirportHeliportTimeSlice特性类型,但是其他的都必须符合AIXM标准。
    • 设置父/子id,使AirportHeliportTimeSlice是AirportHeliport的子id,airportheritalport是aixmbasicmessage的子项。如果您没有这样做,您可能会看到一个验证错误,其效果是“时间片元素不允许作为抽象特性类型的一部分”,这本质上是一个错误警告,说明您已经孤立的特性实际上应该包含在适当的父特性中。
    • 使用AttributeCreators和Aggregators的组合创建任何所需的列表属性结构。
    • 将输出写入AIXMBasicMessage,航空运输,以及airportheriporttimeslice功能类型。

    注释:除了这些步骤,需要注意的是,源模式和目标模式(特性类型和属性数据模型)都是模式驱动的。也就是说,当您创建工作区时,必须从可用模式列表中选择模式,或者添加reader / writer。您不能创建任何用户定义的字段或属性,因为这些字段或属性将不符合AIXM模式。

    完成激励机场到AIXM航空舷窗eliport工作区



    工作空间:激励Aerdromes到AIXM AirportHeliports更多信息,请联络支持.

    xml gml 模式映射 多几何图形 特征 aixm xmlvalidator 星期五,2015年10月09日19:31:45 GMT deanat亚搏在线safe
    基于模式的GML写入器 https://knowledge.亚搏在线safe.com/questions/2977/schema-based-gml-writer.html 嗨,大家好,

    此刻,我的工作区使用XMLTemplater生成所需的GML,然后把它发送给text writer来写一个文件。我看到有一个GML writer支持用户指定的模式。是否有人有使用这个编写器的工作台示例?我想从SQL Server非空间存储过程读取数据,改造后,将它们写入GML文件。

    谢谢!
    gml xmlvalidator 结婚,2015年9月9日10:50:22格林尼治标准时间 亚历山大