Unterschiede (Vor- und Nachteile) vom XML gegenüber Ini-Dateien
-
erkennt keiner von euch, dass man genau das gleiche auch mit lisp machen kann?
Solange du Java abwertest ohne es überhaupt zu erkennen (und das kann man von sich bei weitem nich behaupten, wenn man C# und Java Code verwechselt), hast du auch absolut keinen Anspruch Kenntnisse über Nischensprachen von anderen "Java"-Programmierern zu fordern.
-
c.rackwitz schrieb:
Optimizer schrieb:
...
das ueberzeugt mich garnicht. typisch java.
erkennt keiner von euch, dass man genau das gleiche auch mit lisp machen kann?
Ok. Du kritisiertest, dass man ein Schema schreiben muss. Ich zeigte, dass man das nicht muss (für Konfigurationsdateien, wofür man inis üblicherweise verwendet). Was ist an der Lösung genau schlecht? Geht sie am Thema vorbei? Willst du unbedingt ein freakiges Schema schreiben und alle XML-Tricks für was simples auspacken, dich endlos verkünsteln? Was hat das überhaupt mit einer Programmiersprache zu tun gehabt?
-
TactX schrieb:
Schön peinliche Diskussion...
PS: foo_bar oder fooBar?
fooBar natürlich
sonst könnte man ja gleich noch ungarische notation verwenden.
-
was ich meinte war:
die selbe arbeit, die ihr euch mit sun/MS java und XML machen muesst, um dateien zu validieren, die waere auch zu tun wenn man lisp daten validieren wollen wuerde. ich konnte es einfach nicht so stehen lassen, dass - ich weiss nicht mehr wer - xml schemas als etwas einfaches hinstellt, was man mit inis oder lisp daten nicht machen koennte. kann man naemlich. also ist es kein argument fuer xml.
und weil hier doch von config dateien die rede ist, braucht man ja schon mal kein schema, weil nichts interoperieren muss. von mir aus kanns gerne auch ein binaerformat sein, so lange das programm sich selbst dann noch lesen kann.
das laesst sich dann aber schlecht vom menschen bearbeiten. deswegen bin ich auch gegen xml als config.
laesst sich mit primitiven texteditoren schwerer bearbeiten als conf oder ini.so lange die daten keine baumstruktur haben, sind doch conf und ini perfekt. und wenn doch baumstruktur verlangt ist, wuerde ich s-expressions (lisp) vorziehen. die strapazieren das auge nicht mit meta-text wie "<attribute>", "<property>" oder diesen redundanten schliessenden tags. ein einfaches </> koennte es doch auch tun, ist dann aber wieder zu "uneindeutig", und das scheint manche zu beunruhigen.
-
Ich habe die Diskussion nicht im Detail verfolgt. Ich stimme dir auf jeden Fall mal zu, dass man kein Schema braucht (wie ich sagte).
so lange die daten keine baumstruktur haben, sind doch conf und ini perfekt.
Eine Baumstruktur kann aber schon deutlich übersichtlicher sein... magst du mal meine UT2004.ini sehen?
[URL] Protocol=ut2004 ProtocolDescription=Unreal Protocol Name=Player Map=Index.ut2 LocalMap=NvidiaLogo.ut2 NetBrowseMap=Entry.ut2 Host= Portal= MapExt=ut2 EXEName=UT2004.exe SaveExt=usa Port=7777 Class=Engine.Pawn Character=Gorge [FirstRun] FirstRun=3369 [Engine.Engine] RenderDevice=D3DDrv.D3DRenderDevice ;RenderDevice=D3D9Drv.D3D9RenderDevice ;RenderDevice=Engine.NullRenderDevice ;RenderDevice=OpenGLDrv.OpenGLRenderDevice ;RenderDevice=PixoDrv.PixoRenderDevice AudioDevice=ALAudio.ALAudioSubsystem NetworkDevice=IpDrv.TcpNetDriver DemoRecordingDevice=Engine.DemoRecDriver Console=XInterface.ExtendedConsole GUIController=GUI2K4.UT2K4GUIController StreamPlayer=Engine.StreamInteraction Language=int Product=UT2004 GameEngine=Engine.GameEngine EditorEngine=Editor.EditorEngine DefaultGame=XGame.XDeathmatch DefaultServerGame=XGame.XDeathmatch ViewportManager=WinDrv.WindowsClient ;ViewportManager=SDLDrv.SDLClient Render=Render.Render Input=Engine.Input Canvas=Engine.Canvas DetectedVideoMemory=256 ServerReadsStdin=False CdPath=E:\CD1 [Core.System] PurgeCacheDays=30 SavePath=../Save CachePath=../Cache CacheExt=.uxx CacheRecordPath=../System/*.ucl MusicPath=../Music SpeechPath=../Speech Paths=../System/*.u Paths=../Maps/*.ut2 Paths=../Textures/*.utx Paths=../Sounds/*.uax Paths=../Music/*.umx Paths=../StaticMeshes/*.usx Paths=../Animations/*.ukx Paths=../Saves/*.uvx Suppress=DevLoad Suppress=DevSave Suppress=DevNetTraffic Suppress=DevGarbage Suppress=DevKill Suppress=DevReplace Suppress=DevCompile Suppress=DevBind Suppress=DevBsp Suppress=DevNet Suppress=DevKarma Suppress=RecordCache Suppress=MapVoteDebug Suppress=Init suppress=MapVote Suppress=VoiceChat Suppress=ChatManager Suppress=Timer [Engine.GameEngine] CacheSizeMegs=32 UseSound=True VoIPAllowVAD=False ServerActors=IpDrv.MasterServerUplink ServerActors=UWeb.WebServer ServerPackages=Core ServerPackages=Engine ServerPackages=Fire ServerPackages=Editor ServerPackages=IpDrv ServerPackages=UWeb ServerPackages=GamePlay ServerPackages=UnrealGame ServerPackages=XEffects ServerPackages=XPickups ServerPackages=XGame ServerPackages=XWeapons ServerPackages=XInterface ServerPackages=Vehicles ServerPackages=TeamSymbols_UT2003 ServerPackages=TeamSymbols_UT2004 ServerPackages=BonusPack ServerPackages=SkaarjPack_rc ServerPackages=SkaarjPack ServerPackages=UTClassic ServerPackages=UT2k4Assault ServerPackages=Onslaught ServerPackages=GUI2K4 ServerPackages=UT2k4AssaultFull ServerPackages=OnslaughtFull ServerPackages=xVoting UseStaticMeshBatching=True ColorHighDetailMeshes=False ColorSlowCollisionMeshes=False ColorNoCollisionMeshes=False ColorWorldTextures=False ColorPlayerAndWeaponTextures=False ColorInterfaceTextures=False MainMenuClass=GUI2K4.UT2K4MainMenu ConnectingMenuClass=GUI2K4.UT2K4ServerLoading DisconnectMenuClass=GUI2K4.UT2K4DisconnectOptionPage LoadingClass=GUI2K4.UT2K4SP_LadderLoading SinglePlayerMenuClass=GUI2K4.UT2K4SP_Main [WinDrv.WindowsClient] WindowedViewportX=640 WindowedViewportY=480 FullscreenViewportX=1280 FullscreenViewportY=1024 MenuViewportX=640 MenuViewportY=480 Brightness=0.800000 Contrast=0.700000 Gamma=0.800000 UseJoystick=False CaptureMouse=True StartupFullscreen=True ScreenFlashes=True NoLighting=False MinDesiredFrameRate=35.000000 AnimMeshDynamicLOD=0.000000 Decals=True Coronas=True DecoLayers=True Projectors=True NoDynamicLights=False ReportDynamicUploads=False TextureDetailInterface=Higher TextureDetailTerrain=UltraHigh TextureDetailWeaponSkin=UltraHigh TextureDetailPlayerSkin=UltraHigh TextureDetailWorld=UltraHigh TextureDetailRenderMap=UltraHigh TextureDetailLightmap=UltraHigh NoFractalAnim=False ScaleHUDX=0.000000 MouseXMultiplier=1.000000 MouseYMultiplier=1.000000 UseSpeechRecognition=True WeatherEffects=True DrawDistanceLOD=1.000000 [SDLDrv.SDLClient] WindowedViewportX=640 WindowedViewportY=480 FullscreenViewportX=800 FullscreenViewportY=600 MenuViewportX=640 MenuViewportY=480 Brightness=0.800000 Contrast=0.700000 Gamma=0.800000 UseJoystick=False JoystickNumber=0 IgnoreHat=False JoystickHatNumber=0 CaptureMouse=True StartupFullscreen=True ScreenFlashes=True NoLighting=False MinDesiredFrameRate=35.000000 AnimMeshDynamicLOD=0.0 Decals=True Coronas=True DecoLayers=True Projectors=True NoDynamicLights=False ReportDynamicUploads=False TextureDetailInterface=Normal TextureDetailTerrain=Normal TextureDetailWeaponSkin=Normal TextureDetailPlayerSkin=Normal TextureDetailWorld=Normal TextureDetailRenderMap=Normal TextureDetailLightmap=UltraHigh TextureMaxLOD=0 TextureMinLOD=0 NoFractalAnim=False WeatherEffects=True DrawDistanceLOD=1.0 IgnoreUngrabbedMouse=False AllowUnicodeKeys=False AllowCommandQKeys=True MacFakeMouseButtons=True MacKeepAllScreensOn=False TextToSpeechFile= MacNativeTextToSpeech=True [ALAudio.ALAudioSubsystem] UseEAX=False Use3DSound=False UseDefaultDriver=True CompatibilityMode=False MaxEAXVersion=255 UsePrecache=True ReverseStereo=False Channels=32 MusicVolume=0.200000 AmbientVolume=0.500000 SoundVolume=0.600000 VoiceVolume=4.000000 VolumeScaleRec=0.100000 DopplerFactor=1.000000 Rolloff=0.500000 TimeBetweenHWUpdates=15.000000 DisablePitch=False LowQualitySound=False UseVoIP=True UseVAD=False UseSpatializedVoice=False SpatializedVoiceRadius=100000.000000 EnhancedDenoiser=False LocalZOffset=0.000000 [IpDrv.TcpNetDriver] AllowDownloads=True ConnectionTimeout=20.0 InitialConnectTimeout=200.0 AckTimeout=1.0 KeepAliveTime=0.2 MaxClientRate=15000 MaxInternetClientRate=10000 SimLatency=0 RelevantTimeout=5.0 SpawnPrioritySeconds=1.0 ServerTravelPause=4.0 NetServerMaxTickRate=20 LanServerMaxTickRate=35 DownloadManagers=IpDrv.HTTPDownload DownloadManagers=Engine.ChannelDownload AllowPlayerPortUnreach=False LogPortUnreach=False MaxConnPerIPPerMinute=5 LogMaxConnPerIPPerMin=False [IpServer.UdpServerQuery] GameName=ut2 [IpDrv.MasterServerUplink] DoUplink=True UplinkToGamespy=True SendStats=True ServerBehindNAT=False DoLANBroadcast=False bIgnoreUTANBans=False [IpDrv.MasterServerLink] LANPort=11777 LANServerPort=10777 MasterServerList=(Address="ut2004master1.epicgames.com",Port=28902) MasterServerList=(Address="ut2004master2.epicgames.com",Port=28902) [IpDrv.HTTPDownload] RedirectToURL= ProxyServerHost= ProxyServerPort=3128 UseCompression=True [Engine.DemoRecDriver] AllowDownloads=True DemoSpectatorClass=UnrealGame.DemoRecSpectator MaxClientRate=25000 ConnectionTimeout=15.0 InitialConnectTimeout=200.0 AckTimeout=1.0 KeepAliveTime=1.0 SimLatency=0 RelevantTimeout=5.0 SpawnPrioritySeconds=1.0 ServerTravelPause=4.0 NetServerMaxTickRate=30 LanServerMaxTickRate=30 [Engine.GameReplicationInfo] ServerName=UT2004 Server ShortName=UT2 Server ServerRegion=0 AdminName=KSK_Soldatin AdminEmail= MessageOfTheDay= [D3DDrv.D3DRenderDevice] DetailTextures=True HighDetailActors=True SuperHighDetailActors=True UsePrecaching=True UseTrilinear=True AdapterNumber=-1 ReduceMouseLag=True UseTripleBuffering=False UseHardwareTL=True UseHardwareVS=True UseCubemaps=True DesiredRefreshRate=60 UseCompressedLightmaps=True UseStencil=False Use16bit=False Use16bitTextures=False MaxPixelShaderVersion=255 UseVSync=False LevelOfAnisotropy=1 DetailTexMipBias=0.000000 DefaultTexMipBias=-0.500000 UseNPatches=False TesselationFactor=1.000000 CheckForOverflow=False AvoidHitches=False OverrideDesktopRefreshRate=False ReportUnusedTextures=False DecompressTextures=False TerrainLOD=0 SkyboxHack=False LowQualityTerrain=False [D3D9Drv.D3D9RenderDevice] DetailTextures=True HighDetailActors=True SuperHighDetailActors=True UsePrecaching=True UseTrilinear=True AdapterNumber=-1 ReduceMouseLag=True UseTripleBuffering=False UseHardwareTL=True UseHardwareVS=True UseCubemaps=True DesiredRefreshRate=60 UseCompressedLightmaps=True UseStencil=False Use16bit=False Use16bitTextures=False MaxPixelShaderVersion=255 UseVSync=False LevelOfAnisotropy=1 DetailTexMipBias=0.0 DefaultTexMipBias=-0.5 UseNPatches=False TesselationFactor=1.0 CheckForOverflow=False OverrideDesktopRefreshRate=False [OpenGLDrv.OpenGLRenderDevice] DetailTextures=True HighDetailActors=True SuperHighDetailActors=True UsePrecaching=True UseCompressedLightmaps=True UseTrilinear=True UseStencil=False MaxTextureUnits=8 VARSize=32 ReduceMouseLag=True UseVSync=False LevelOfAnisotropy=1.0 DetailTexMipBias=0.0 DefaultTexMipBias=-0.5 UseVBO=False UseVSync=False AppleVA=1 MultisampleBuffers=0 MultisampleSamples=0 MultisampleHint=2 [PixoDrv.PixoRenderDevice] FogEnabled=True Zoom2X=True SimpleMaterials=True LimitTextureSize=True LowQualityTerrain=True TerrainLOD=10 SkyboxHack=True FilterQuality3D=1 FilterQualityHUD=1 HighDetailActors=False SuperHighDetailActors=False ReduceMouseLag=False DesiredRefreshRate=0 DetailTexMipBias=0.000000 Use16bitTextures=False Use16bit=True UseStencil=False UseCompressedLightmaps=False DetailTextures=False UsePrecaching=True [Engine.NullRenderDevice] DetailTextures=True HighDetailActors=True SuperHighDetailActors=True UsePrecaching=True UseCompressedLightmaps=True UseStencil=False [Editor.EditorEngine] UseSound=True CacheSizeMegs=32 GridEnabled=True SnapVertices=False SnapDistance=1.000000 GridSize=(X=4.000000,Y=4.000000,Z=4.000000) RotGridEnabled=True RotGridSize=(Pitch=1024,Yaw=1024,Roll=1024) GameCommandLine=-log FovAngleDegrees=90.000000 GodMode=True AutoSave=True AutoSaveTimeMinutes=5 AutoSaveIndex=6 UseAxisIndicator=True MatineeCurveDetail=0.1 ShowIntWarnings=False UseSizingBox=True RenderDevice=D3DDrv.D3DRenderDevice AudioDevice=ALAudio.ALAudioSubsystem NetworkDevice=IpDrv.TcpNetDriver DemoRecordingDevice=Engine.DemoRecDriver Console=Engine.Console Language=ute AlwaysShowTerrain=False UseActorRotationGizmo=False LoadEntirePackageWhenSaving=0 EditPackages=Core EditPackages=Engine EditPackages=Fire EditPackages=Editor EditPackages=UnrealEd EditPackages=IpDrv EditPackages=UWeb EditPackages=GamePlay EditPackages=UnrealGame EditPackages=XGame_rc EditPackages=XEffects EditPackages=XWeapons_rc EditPackages=XPickups_rc EditPackages=XPickups EditPackages=XGame EditPackages=XWeapons EditPackages=XInterface EditPackages=XAdmin EditPackages=XWebAdmin EditPackages=Vehicles EditPackages=BonusPack EditPackages=SkaarjPack_rc EditPackages=SkaarjPack EditPackages=UTClassic EditPackages=UT2k4Assault EditPackages=Onslaught EditPackages=GUI2K4 EditPackages=UT2k4AssaultFull EditPackages=OnslaughtFull EditPackages=xVoting EditPackages=StreamlineFX EditPackages=UTV2004c EditPackages=UTV2004s CutdownPackages=Core CutdownPackages=Editor CutdownPackages=Engine CutdownPackages=Fire CutdownPackages=GamePlay CutdownPackages=GUI2K4 CutdownPackages=IpDrv CutdownPackages=UT2K4Assault CutdownPackages=Onslaught CutdownPackages=UnrealEd CutdownPackages=UnrealGame CutdownPackages=UTClassic CutdownPackages=UWeb CutdownPackages=Vehicles CutdownPackages=XAdmin CutdownPackages=XEffects CutdownPackages=XGame CutdownPackages=XGame_rc CutdownPackages=XInterface CutdownPackages=XPickups CutdownPackages=XPickups_rc CutdownPackages=XWeapons CutdownPackages=XWeapons_rc CutdownPackages=XWebAdmin CutdownPackages=XVoting [UWeb.WebServer] Applications[0]=xWebAdmin.UTServerAdmin ApplicationPaths[0]=/ServerAdmin Applications[1]=xWebAdmin.UTImageServer ApplicationPaths[1]=/images bEnabled=True ListenPort=80 [Engine.Console] ConsoleHotKey=9 TimePerTitle=30.000000 TimePerDemo=60.000000 TimePerSoak=3600.000000 TimeTooIdle=0.000000 DemoLevels[0]=DM-Curse3 DemoLevels[1]=DM-Antalus DemoLevels[2]=CTF-Chrome DemoLevels[3]=DOM-SunTemple DemoLevels[4]=BR-Endagra TimeBeforeReboot=5.000000 DemoLevels[5]= DemoLevels[6]= DemoLevels[7]= DemoLevels[8]= DemoLevels[9]= DemoLevels[10]= DemoLevels[11]= DemoLevels[12]= DemoLevels[13]= DemoLevels[14]= DemoLevels[15]= DemoLevels[16]= DemoLevels[17]= DemoLevels[18]= DemoLevels[19]= DemoLevels[20]= DemoLevels[21]= DemoLevels[22]= DemoLevels[23]= DemoLevels[24]= DemoLevels[25]= DemoLevels[26]= DemoLevels[27]= DemoLevels[28]= DemoLevels[29]= DemoLevels[30]= DemoLevels[31]= DemoLevels[32]= DemoLevels[33]= DemoLevels[34]= DemoLevels[35]= DemoLevels[36]= DemoLevels[37]= DemoLevels[38]= DemoLevels[39]= DemoLevels[40]= DemoLevels[41]= DemoLevels[42]= DemoLevels[43]= DemoLevels[44]= DemoLevels[45]= DemoLevels[46]= DemoLevels[47]= DemoLevels[48]= DemoLevels[49]= DemoLevels[50]= DemoLevels[51]= DemoLevels[52]= DemoLevels[53]= DemoLevels[54]= DemoLevels[55]= DemoLevels[56]= DemoLevels[57]= DemoLevels[58]= DemoLevels[59]= DemoLevels[60]= DemoLevels[61]= DemoLevels[62]= DemoLevels[63]= [Engine.AccessControl] AdminPassword=admin GamePassword= bBanByID=True LoginDelaySeconds=0.000000 IPPolicies=ACCEPT;* [Engine.GameInfo] GoreLevel=1 MaxSpectators=2 MaxPlayers=16 AutoAim=1.000000 GameSpeed=1.000000 bChangeLevels=True bStartUpLocked=False bNoBots=False bAttractAlwaysFirstPerson=False NumMusicFiles=13 bEnableStatLogging=false HUDType=Engine.Hud MaxLives=0 TimeLimit=0 GoalScore=0 GameStatsClass=IpDrv.MasterServerGameStats SecurityClass=UnrealGame.UnrealSecurity AccessControlClass=Engine.AccessControl VotingHandlerType=xVoting.xVotingHandler MaxIdleTime=0.000000 bWeaponStay=False bAllowWeaponThrowing=True bAllowBehindView=False bAdminCanPause=False bWeaponShouldViewShake=True bLowGore=False bLargeGameVOIP=False GameDifficulty=4.000000 ResetTimeDelay=0 MaplistHandlerType= ServerSkillLevel= [Engine.AmbientSound] AmbientVolume=0.25 [Engine.LevelInfo] PhysicsDetailLevel=PDL_High MeshLODDetailLevel=MDL_Ultra bLowSoundDetail=False DecalStayScale=2.000000 bNeverPrecache=false bShouldPreload=True bDesireSkinPreload=True bKickLiveIdlers=False MaxClientFrameRate=90.000000 MaxTimeMargin=1.000000 TimeMarginSlack=1.350000 MinTimeMargin=-1.000000 [XInterface.ExtendedConsole] ConsoleHotKey=192 NeedPasswordMenuClass=GUI2K4.UT2K4GetPassword bSpeechMenuUseMouseWheel=True bSpeechMenuUseLetters=False SMOriginX=0.010000 SMOriginY=0.300000 LetterKeys[0]=IK_Q LetterKeys[1]=IK_W LetterKeys[2]=IK_E LetterKeys[3]=IK_R LetterKeys[4]=IK_A LetterKeys[5]=IK_S LetterKeys[6]=IK_D LetterKeys[7]=IK_F LetterKeys[8]=IK_Z LetterKeys[9]=IK_X MusicManagerClassName=GUI2K4.StreamPlayer MaxScrollbackSize=128 PasswordPromptMenu= ChatMenuClass=GUI2K4.UT2K4InGameChat StatsPromptMenuClass=GUI2K4.UT2K4StatsPrompt WaitingGameClassName= ServerInfoMenu=GUI2K4.UT2K4ServerInfo bDemoJogKeys=True Favorites=(ServerID=0,IP="lorenzstr.no-ip.info",Port=7777,QueryPort=7778,ServerName="Unknown Server") SavedPasswords=(Server="lorenzstr.no-ip.info",Password="foobar") SavedPasswords=(Server="84.152.88.27",Password="foobar") [XGame.xDeathMatch] HUDType=XInterface.HudBDeathMatch MaxLives=0 TimeLimit=12 GoalScore=20 bTeamScoreRound=False bPlayersMustBeReady=False bAllowTaunts=True bForceRespawn=False bWeaponStay=true bCustomPreload=False NetWait=5 bAdjustSkill=False bAllowTrans=False SpawnProtectionTime=2.000000 LateEntryLives=1 LoginMenuClass=GUI2K4.UT2K4PlayerLoginMenu bAllowPrivateChat=True bAllowWeaponThrowing=True ResetTimeDelay=0 [XGame.xTeamGame] HUDType=XInterface.HudBTeamDeathMatch MaxLives=0 TimeLimit=20 GoalScore=60 bTeamScoreRound=False bPlayersMustBeReady=False bAllowTaunts=True FriendlyFireScale=0 MaxTeamSize=16 bForceRespawn=False bWeaponStay=true [XGame.xCTFGame] HUDType=XInterface.HudBCaptureTheFlag MaxLives=0 TimeLimit=20 GoalScore=3 bTeamScoreRound=False bPlayersMustBeReady=False bAllowTaunts=True FriendlyFireScale=0.000000 MaxTeamSize=16 bForceRespawn=False bWeaponStay=true bAllowNonTeamChat=False NetWait=5 bAdjustSkill=False bAllowTrans=True SpawnProtectionTime=2.000000 LateEntryLives=1 LoginMenuClass=GUI2K4.UT2K4PlayerLoginMenu bAllowPrivateChat=True bAllowWeaponThrowing=True ResetTimeDelay=0 [XGame.xDoubleDom] HUDType=XInterface.HudBDoubleDomination MaxLives=0 TimeLimit=20 GoalScore=3 bTeamScoreRound=False bPlayersMustBeReady=False bAllowTaunts=True TimeToScore=10 TimeDisabled=10 FriendlyFireScale=0 MaxTeamSize=16 bForceRespawn=False bWeaponStay=true [XGame.xBombingRun] HUDType=XInterface.HudBBombingRun MaxLives=0 TimeLimit=20 GoalScore=15 bTeamScoreRound=False bPlayersMustBeReady=False bAllowTaunts=True FriendlyFireScale=0 MaxTeamSize=16 bForceRespawn=False bWeaponStay=true [Engine.MaplistManager] Games=(GameType="BonusPack.xLastManStandingGame",ActiveMaplist="Default LMS") Games=(GameType="BonusPack.xMutantGame",ActiveMaplist="Default MUT") Games=(GameType="Onslaught.ONSOnslaughtGame",ActiveMaplist="Default ONS") Games=(GameType="SkaarjPack.Invasion",ActiveMaplist="Default INV") Games=(GameType="UT2k4Assault.ASGameInfo",ActiveMaplist="Default AS") Games=(GameType="XGame.xBombingRun",ActiveMaplist="Default BR") Games=(GameType="XGame.xCTFGame",ActiveMaplist="Default CTF") Games=(GameType="XGame.xDeathMatch",ActiveMaplist="Default DM") Games=(GameType="XGame.xDoubleDom",ActiveMaplist="Default DOM2") Games=(GameType="XGame.xTeamGame",ActiveMaplist="Default TDM") Games=(GameType="XGame.xVehicleCTFGame",ActiveMaplist="Default VCTF") Games=(GameType="XGame.InstagibCTF",ActiveMaplist="Default ICTF") Games=(GameType="Jailbreak.Jailbreak",ActiveMaplist="Default JB") [DefaultDM MaplistRecord] DefaultTitle=Default DM DefaultGameType=XGame.xDeathMatch DefaultActive=1 DefaultMaps=DM-Curse4 DefaultMaps=DM-Corrugation DefaultMaps=DM-1on1-Albatross DefaultMaps=DM-1on1-Desolation DefaultMaps=DM-1on1-Idoma DefaultMaps=DM-1on1-Irondust DefaultMaps=DM-1on1-Mixer DefaultMaps=DM-1on1-Roughinery DefaultMaps=DM-1on1-Spirit DefaultMaps=DM-1on1-Squader DefaultMaps=DM-1on1-Trite [DefaultTDM MaplistRecord] DefaultTitle=Default TDM DefaultGameType=XGame.xTeamGame DefaultActive=0 DefaultMaps=DM-RRAJIGAR DefaultMaps=DM-RANKIN DefaultMaps=DM-CORRUGATION DefaultMaps=DM-DE-GRENDELKEEP DefaultMaps=DM-DE-IRONIC DefaultMaps=DM-DE-OSIRIS2 DefaultMaps=DM-GESTALT DefaultMaps=DM-IRONDEITY DefaultMaps=DM-METALLURGY DefaultMaps=DM-Deck17 DefaultMaps=DM-Antalus DefaultMaps=DM-Asbestos DefaultMaps=DM-Curse4 [1on1TeamDeathmatch MaplistRecord] DefaultTitle=1 on 1 Team Deathmatch DefaultGameType=XGame.xTeamGame DefaultActive=0 DefaultMaps=DM-1on1-Albatross DefaultMaps=DM-1on1-Crash DefaultMaps=DM-1on1-Desolation DefaultMaps=DM-1on1-Idoma DefaultMaps=DM-1on1-Irondust DefaultMaps=DM-1on1-Mixer DefaultMaps=DM-1on1-Roughinery DefaultMaps=DM-1on1-Serpentine DefaultMaps=DM-1on1-Spirit DefaultMaps=DM-1on1-Squader DefaultMaps=DM-1on1-Trite [1on1Deathmatch MaplistRecord] DefaultTitle=1 on 1 Deathmatch DefaultGameType=XGame.xDeathMatch DefaultActive=0 DefaultMaps=DM-1on1-Albatross DefaultMaps=DM-1on1-Crash DefaultMaps=DM-1on1-Desolation DefaultMaps=DM-1on1-Idoma DefaultMaps=DM-1on1-Irondust DefaultMaps=DM-1on1-Mixer DefaultMaps=DM-1on1-Roughinery DefaultMaps=DM-1on1-Serpentine DefaultMaps=DM-1on1-Spirit DefaultMaps=DM-1on1-Squader DefaultMaps=DM-1on1-Trite [XInterface.MapListDeathMatch] MapNum=1 Maps=DM-Curse4 Maps=DM-Corrugation Maps=DM-1on1-Albatross Maps=DM-1on1-Desolation Maps=DM-1on1-Idoma Maps=DM-1on1-Irondust Maps=DM-1on1-Mixer Maps=DM-1on1-Roughinery Maps=DM-1on1-Spirit Maps=DM-1on1-Squader Maps=DM-1on1-Trite [XInterface.MapListTeamDeathMatch] MapNum=0 Maps=DM-RRAJIGAR Maps=DM-RANKIN Maps=DM-CORRUGATION Maps=DM-DE-GRENDELKEEP Maps=DM-DE-IRONIC Maps=DM-DE-OSIRIS2 Maps=DM-GESTALT Maps=DM-IRONDEITY Maps=DM-METALLURGY Maps=DM-Deck17 Maps=DM-Antalus Maps=DM-Asbestos Maps=DM-Curse4 [XInterface.MapListCaptureTheFlag] MapNum=0 Maps=CTF-ABSOLUTEZERO Maps=CTF-MOONDRAGON Maps=CTF-GRASSYKNOLL Maps=CTF-COLOSSUS Maps=CTF-SMOTE Maps=CTF-DOUBLEDAMMAGE Maps=CTF-AVARIS Maps=CTF-BRIDGEOFFATE Maps=CTF-FaceClassic Maps=CTF-CHROME Maps=CTF-Citadel Maps=CTF-Orbital2 [XInterface.MapListDoubleDomination] MapNum=0 Maps=DOM-ATLANTIS Maps=DOM-ACCESS Maps=DOM-ASWAN Maps=DOM-JUNKYARD Maps=DOM-RENASCENT Maps=DOM-SUNTEMPLE Maps=DOM-SCORCHEDEARTH [XInterface.MapListBombingRun] MapNum=0 Maps=BR-TWINTOMBS Maps=BR-BRIDGEOFFATE Maps=BR-CANYON Maps=BR-COLOSSUS Maps=BR-SERENITY Maps=BR-SkyLine Maps=BR-Anubis [BonusPack.MapListMutant] Maps=DM-RRAJIGAR Maps=DM-RANKIN Maps=DM-CORRUGATION Maps=DM-DE-GRENDELKEEP Maps=DM-DE-IRONIC Maps=DM-DE-OSIRIS2 Maps=DM-GESTALT Maps=DM-IRONDEITY Maps=DM-METALLURGY Maps=DM-Deck17 Maps=DM-Antalus Maps=DM-Asbestos Maps=DM-Curse4 [BonusPack.MapListLastManStanding] Maps=DM-RRAJIGAR Maps=DM-RANKIN Maps=DM-CORRUGATION Maps=DM-DE-GRENDELKEEP Maps=DM-DE-IRONIC Maps=DM-DE-OSIRIS2 Maps=DM-GESTALT Maps=DM-IRONDEITY Maps=DM-METALLURGY Maps=DM-Deck17 Maps=DM-Antalus Maps=DM-Asbestos Maps=DM-Curse4 [Onslaught.ONSMapListOnslaught] Maps=ONS-TORLAN?LinkSetup=Default Maps=ONS-ARCTICSTRONGHOLD?LinkSetup=Default Maps=ONS-CROSSFIRE?LinkSetup=Default Maps=ONS-DRIA?LinkSetup=Default Maps=ONS-SEVERANCE?LinkSetup=Default [Skaarjpack.MapListSkaarjInvasion] Maps=DM-RRAJIGAR Maps=DM-RANKIN Maps=DM-CORRUGATION Maps=DM-DE-GRENDELKEEP Maps=DM-DE-IRONIC Maps=DM-DE-OSIRIS2 Maps=DM-GESTALT Maps=DM-IRONDEITY Maps=DM-METALLURGY Maps=DM-Deck17 Maps=DM-Antalus Maps=DM-Asbestos [UT2K4Assault.ASMapList] MapNum=1 Maps=AS-CONVOY Maps=AS-FALLENCITY Maps=AS-MOTHERSHIP Maps=AS-GLACIER Maps=AS-ROBOTFACTORY Maps=AS-JUNKYARD [DefaultLMS MaplistRecord] DefaultTitle=Default LMS DefaultGameType=BonusPack.xLastManStandingGame DefaultActive=0 DefaultMaps=DM-RRAJIGAR DefaultMaps=DM-RANKIN DefaultMaps=DM-CORRUGATION DefaultMaps=DM-DE-GRENDELKEEP DefaultMaps=DM-DE-IRONIC DefaultMaps=DM-DE-OSIRIS2 DefaultMaps=DM-GESTALT DefaultMaps=DM-IRONDEITY DefaultMaps=DM-METALLURGY DefaultMaps=DM-Deck17 DefaultMaps=DM-Antalus DefaultMaps=DM-Asbestos DefaultMaps=DM-Curse4 [DefaultMUT MaplistRecord] DefaultTitle=Default MUT DefaultGameType=BonusPack.xMutantGame DefaultActive=0 DefaultMaps=DM-RRAJIGAR DefaultMaps=DM-RANKIN DefaultMaps=DM-CORRUGATION DefaultMaps=DM-DE-GRENDELKEEP DefaultMaps=DM-DE-IRONIC DefaultMaps=DM-DE-OSIRIS2 DefaultMaps=DM-GESTALT DefaultMaps=DM-IRONDEITY DefaultMaps=DM-METALLURGY DefaultMaps=DM-Deck17 DefaultMaps=DM-Antalus DefaultMaps=DM-Asbestos DefaultMaps=DM-Curse4 [DefaultONS MaplistRecord] DefaultTitle=Default ONS DefaultGameType=Onslaught.ONSOnslaughtGame DefaultActive=0 DefaultMaps=ONS-TORLAN?LinkSetup=Default DefaultMaps=ONS-ARCTICSTRONGHOLD?LinkSetup=Default DefaultMaps=ONS-CROSSFIRE?LinkSetup=Default DefaultMaps=ONS-DRIA?LinkSetup=Default DefaultMaps=ONS-SEVERANCE?LinkSetup=Default [DefaultINV MaplistRecord] DefaultTitle=Default INV DefaultGameType=SkaarjPack.Invasion DefaultActive=0 DefaultMaps=DM-RRAJIGAR DefaultMaps=DM-RANKIN DefaultMaps=DM-CORRUGATION DefaultMaps=DM-DE-GRENDELKEEP DefaultMaps=DM-DE-IRONIC DefaultMaps=DM-DE-OSIRIS2 DefaultMaps=DM-GESTALT DefaultMaps=DM-IRONDEITY DefaultMaps=DM-METALLURGY DefaultMaps=DM-Deck17 DefaultMaps=DM-Antalus DefaultMaps=DM-Asbestos [DefaultAS MaplistRecord] DefaultTitle=Default AS DefaultGameType=UT2k4Assault.ASGameInfo DefaultActive=1 DefaultMaps=AS-CONVOY DefaultMaps=AS-FALLENCITY DefaultMaps=AS-MOTHERSHIP DefaultMaps=AS-GLACIER DefaultMaps=AS-ROBOTFACTORY DefaultMaps=AS-JUNKYARD [DefaultICTF MaplistRecord] DefaultTitle=Default ICTF DefaultGameType=XGame.InstagibCTF DefaultActive=0 DefaultMaps=CTF-ABSOLUTEZERO DefaultMaps=CTF-MOONDRAGON DefaultMaps=CTF-GRASSYKNOLL DefaultMaps=CTF-COLOSSUS DefaultMaps=CTF-SMOTE DefaultMaps=CTF-DOUBLEDAMMAGE DefaultMaps=CTF-AVARIS DefaultMaps=CTF-BRIDGEOFFATE DefaultMaps=CTF-FaceClassic DefaultMaps=CTF-CHROME DefaultMaps=CTF-Citadel DefaultMaps=CTF-Orbital2 [DefaultBR MaplistRecord] DefaultTitle=Default BR DefaultGameType=XGame.xBombingRun DefaultActive=0 DefaultMaps=BR-TWINTOMBS DefaultMaps=BR-BRIDGEOFFATE DefaultMaps=BR-CANYON DefaultMaps=BR-COLOSSUS DefaultMaps=BR-SERENITY DefaultMaps=BR-SkyLine DefaultMaps=BR-Anubis [DefaultCTF MaplistRecord] DefaultTitle=Default CTF DefaultGameType=XGame.xCTFGame DefaultActive=0 DefaultMaps=CTF-ABSOLUTEZERO DefaultMaps=CTF-MOONDRAGON DefaultMaps=CTF-GRASSYKNOLL DefaultMaps=CTF-COLOSSUS DefaultMaps=CTF-SMOTE DefaultMaps=CTF-DOUBLEDAMMAGE DefaultMaps=CTF-AVARIS DefaultMaps=CTF-BRIDGEOFFATE DefaultMaps=CTF-FaceClassic DefaultMaps=CTF-CHROME DefaultMaps=CTF-Citadel DefaultMaps=CTF-Orbital2 [DefaultDOM2 MaplistRecord] DefaultTitle=Default DOM2 DefaultGameType=XGame.xDoubleDom DefaultActive=0 DefaultMaps=DOM-ATLANTIS DefaultMaps=DOM-ACCESS DefaultMaps=DOM-ASWAN DefaultMaps=DOM-JUNKYARD DefaultMaps=DOM-RENASCENT DefaultMaps=DOM-SUNTEMPLE DefaultMaps=DOM-SCORCHEDEARTH [DefaultVCTF MaplistRecord] DefaultTitle=Default VCTF DefaultGameType=XGame.xVehicleCTFGame DefaultActive=0 [UnrealGame.DeathMatch] MinNetPlayers=1 RestartWait=30 bTournament=False bAutoNumBots=False bColoredDMSkins=False bPlayersMustBeReady=False bWaitForNetPlayers=False bAllowPlayerLights=False bForceDefaultCharacter=False NamePrefixes[0]=Mr_ NamePrefixes[1]= NamePrefixes[2]=The_Real_ NamePrefixes[3]=Evil_ NamePrefixes[4]= NamePrefixes[5]=Owns_ NamePrefixes[6]= NamePrefixes[7]=Evil_ NamePrefixes[8]= NamePrefixes[9]= NameSuffixes[0]= NameSuffixes[1]=_is_lame NameSuffixes[2]= NameSuffixes[3]= NameSuffixes[4]=_sucks NameSuffixes[5]= NameSuffixes[6]=_OwnsYou NameSuffixes[7]= NameSuffixes[8]=_jr NameSuffixes[9]='s_clone [UnrealGame.UnrealMPGameInfo] BotMode=1 MinPlayers=6 EndTimeDelay=4.000000 BotRatio=1.000000 [Engine.VoiceChatReplicationInfo] bEnableVoiceChat=True bAllowLocalBroadcast=True MaxChatters=0 LocalBroadcastRange=1000.000000 DefaultBroadcastRadius=20.000000 VoIPInternetCodecs=CODEC_48NB VoIPLANCodecs=CODEC_48NB VoIPLANCodecs=CODEC_96WB [Engine.BroadcastHandler] bMuteSpectators=False bPartitionSpectators=False [xVoting.xVotingHandler] VoteTimeLimit=70 ScoreBoardDelay=5 bAutoOpen=True MidGameVotePercent=50 bScoreMode=False bAccumulationMode=False bEliminationMode=False MinMapCount=2 MapVoteHistoryType=xVoting.MapVoteHistory_INI RepeatLimit=4 DefaultGameConfig=0 bDefaultToCurrentGameType=True bMapVote=False bKickVote=False bMatchSetup=False KickPercent=51 bAnonymousKicking=True MapListLoaderType=xVoting.DefaultMapListLoader ServerNumber=1 CurrentGameConfig=0 [xVoting.DefaultMapListLoader] bUseMapList=False MapNamePrefixes= [Jailbreak.JBMapList] Maps=JB-Addien-Dwy-Gold Maps=JB-BabylonTemple-Gold Maps=JB-CastleBreak-Gold Maps=JB-Cosmos Maps=JB-Poseidon-Gold Maps=JB-Oasis Maps=JB-Cavern Maps=JB-MoonCraters-Gold Maps=JB-Aswan Maps=JB-SavoIsland-Gold Maps=JB-NoSense-Gold Maps=JB-Conduit-Gold Maps=JB-IndusRage2-Gold Maps=JB-Arlon-Gold Maps=JB-SubZero Maps=JB-Solamander-Gold MapNum=0 [DefaultJB MaplistRecord] DefaultTitle=Default JB DefaultGameType=Jailbreak.Jailbreak DefaultActive=0 DefaultMaps=JB-Addien-Dwy-Gold DefaultMaps=JB-BabylonTemple-Gold DefaultMaps=JB-CastleBreak-Gold DefaultMaps=JB-Cosmos DefaultMaps=JB-Poseidon-Gold DefaultMaps=JB-Oasis DefaultMaps=JB-Cavern DefaultMaps=JB-MoonCraters-Gold DefaultMaps=JB-Aswan DefaultMaps=JB-SavoIsland-Gold DefaultMaps=JB-NoSense-Gold DefaultMaps=JB-Conduit-Gold DefaultMaps=JB-IndusRage2-Gold DefaultMaps=JB-Arlon-Gold DefaultMaps=JB-SubZero DefaultMaps=JB-Solamander-Gold [Jailbreak.Jailbreak] Addons=JBAddonAvenger.JBAddonAvenger,JBAddonCelebration.JBAddonCelebration,JBAddonLlama.JBAddonLlama,JBAddonProtection.JBAddonProtection bEnableJailFights=True bEnableScreens=True bEnableSpectatorDeathCam=True bFavorHumansForArena=False bEnableWebScoreboard=True bEnableWebAdminExtension=True WebScoreboardClass=Jailbreak.JBWebApplicationScoreboard WebScoreboardPath=/scoreboard bAllowNonTeamChat=False FriendlyFireScale=0.000000 NetWait=5 bForceRespawn=False bAdjustSkill=False bAllowTaunts=True bAllowTrans=False SpawnProtectionTime=2.000000 LateEntryLives=1 LoginMenuClass=GUI2K4.UT2K4PlayerLoginMenu bAllowPrivateChat=True bWeaponStay=True bAllowWeaponThrowing=True ResetTimeDelay=0 GoalScore=1 MaxLives=0 TimeLimit=20 [UnrealGame.TeamGame] bBalanceTeams=True bPlayersBalanceTeams=True [Jailbreak.JBInteractionKeys] AutoBoundKeys= [UT2k4Assault.ASGameInfo] RoundLimit=1 RoundTimeLimit=14 PracticeTimeLimit=0 ReinforcementsFreq=7 bAllowNonTeamChat=False FriendlyFireScale=0.000000 NetWait=15 bForceRespawn=False bAdjustSkill=False bAllowTaunts=True bAllowTrans=False SpawnProtectionTime=3.000000 LateEntryLives=1 LoginMenuClass=GUI2K4.UT2K4SinglePlayerLoginMenu bAllowPrivateChat=True bWeaponStay=True bAllowWeaponThrowing=True ResetTimeDelay=8 GoalScore=0 MaxLives=0 TimeLimit=0 [IpDrv.UdpGamespyQuery] MinNetVer=0 OldQueryPortNumber=7787 bRestartServerOnPortSwap=True bDebugPortSwaps=True [Onslaught.ONSOnslaughtGame] OvertimeCoreDrainPerSec=20 bRandSetupAfterReset=False bSwapSidesAfterReset=True bAllowNonTeamChat=False FriendlyFireScale=1.000000 NetWait=15 bForceRespawn=False bAdjustSkill=False bAllowTaunts=True bAllowTrans=False SpawnProtectionTime=2.000000 LateEntryLives=1 LoginMenuClass=GUI2K4.UT2K4OnslaughtLoginMenu bAllowPrivateChat=True bWeaponStay=True bAllowWeaponThrowing=True ResetTimeDelay=11 GoalScore=3 MaxLives=0 TimeLimit=20
Da drin such mal was bestimmtes von dem du nicht genau weißt wie es heißt, hab ich schon ein paar mal gemacht! Also ohne Baumstruktur kommt für mich mangels Ordnung nichts in Frage. Also fällt conf und ini komplett raus. XML find ich eigentlich ganz gut lesbar, ich würde als Nachteil eher sehen, dass es sauviel Platz braucht im Vergleich zu anderen Lösungen. Zu dem Lisp-Zeug was du vorschlägst (hat es wirklich was mit der Sprache zu tun? Geht es ohne Lisp nicht?) kann ich mangels Wissen jetzt nichts sagen.
-
@Optimizer
und wie sähe die Datei in XML aus?
-
So, dass die hunderttausend Sachen (hoffentlich) sinnvoll gruppiert sind. Klar, weniger wird es nicht, wenn es so viel zum Konfigurieren gibt, dann ist es so. Aber wenn ein übergeordneter Node schon mal nix ist, scrollst du du so lange runter, bis die Einrückung wieder zurückgeht, ist doch geil.
Also ich finde sowas schon übersichtlicher...
-
Optimizer schrieb:
So, dass die hunderttausend Sachen (hoffentlich) sinnvoll gruppiert sind. Klar, weniger wird es nicht, wenn es so viel zum Konfigurieren gibt, dann ist es so. Aber wenn ein übergeordneter Node schon mal nix ist, scrollst du du so lange runter, bis die Einrückung wieder zurückgeht, ist doch geil.
Also ich finde sowas schon übersichtlicher...
die sind doch auch so gruppiert. Wie du sagst, die Nodes werden nicht weniger, dafür kommt mehr Text. Ich weiß nicht ob mehr Text wirklich eine Hilfe gegen Unübersichtlichkeit einer Datei ist. Aber da wir hier keinen Vergleich haben, können wir beide nur spekulieren.
-
Spätestens, wenn Du einen XML-Editor benutzt, der Knoten auf- und zuklappen kann, wie es jeder moderne Browser bietet.
-
@rüdiger:
Das stimmt natürlich, es ist reine Spekulation. Man kann ja nicht mal davon ausgehen, dass die Gruppierung bei Verwendung einer Baumstruktur gleich ausgefallen wäre. Ich gebe zu, ich kann dir nicht beweisen, dass XML übersichtlicher ist, ist nur so ein Gefühl von mir.
-
Ich hab hier zwar nicht vor alles in XML zu gestalten, aber zumindestens ein Teil davon soll zeigen, dass die UT Konfigurations absoluter Müll ist.
[XInterface.MapListTeamDeathMatch] MapNum=0 Maps=DM-RRAJIGAR Maps=DM-RANKIN Maps=DM-CORRUGATION Maps=DM-DE-GRENDELKEEP Maps=DM-DE-IRONIC Maps=DM-DE-OSIRIS2 Maps=DM-GESTALT Maps=DM-IRONDEITY Maps=DM-METALLURGY Maps=DM-Deck17 Maps=DM-Antalus Maps=DM-Asbestos Maps=DM-Curse4 .... [BonusPack.MapListMutant] Maps=DM-RRAJIGAR Maps=DM-RANKIN Maps=DM-CORRUGATION Maps=DM-DE-GRENDELKEEP Maps=DM-DE-IRONIC Maps=DM-DE-OSIRIS2 Maps=DM-GESTALT Maps=DM-IRONDEITY Maps=DM-METALLURGY Maps=DM-Deck17 Maps=DM-Antalus Maps=DM-Asbestos Maps=DM-Curse4 [BonusPack.MapListLastManStanding] Maps=DM-RRAJIGAR Maps=DM-RANKIN Maps=DM-CORRUGATION Maps=DM-DE-GRENDELKEEP Maps=DM-DE-IRONIC Maps=DM-DE-OSIRIS2 Maps=DM-GESTALT Maps=DM-IRONDEITY Maps=DM-METALLURGY Maps=DM-Deck17 Maps=DM-Antalus Maps=DM-Asbestos Maps=DM-Curse4 ... [Skaarjpack.MapListSkaarjInvasion] Maps=DM-RRAJIGAR Maps=DM-RANKIN Maps=DM-CORRUGATION Maps=DM-DE-GRENDELKEEP Maps=DM-DE-IRONIC Maps=DM-DE-OSIRIS2 Maps=DM-GESTALT Maps=DM-IRONDEITY Maps=DM-METALLURGY Maps=DM-Deck17 Maps=DM-Antalus Maps=DM-Asbestos
<maps id="deathMatch"> <include>DM-RRAJIGAR</include> <include>DM-RANKIN</include> <include>DM-CORRUGATION</include> <include>DM-DE-GRENDELKEEP</include> <include>DM-DE-IRONIC</include> <include>DM-DE-OSIRIS2</include> <include>DM-GESTALT</include> <include>DM-IRONDEITY</include> <include>DM-METALLURGY</include> <include>DM-Deck17</include> <include>DM-Antalus</include> <include>DM-Asbestos</include> <include>DM-Curse4</include> </maps> ... <xInterfaces> <xInterface name="teamDeathMatch"> <mapNumber>0</mapNumber> <maps refid="deathMatch" /> </xInterface> </xInterfaces> <bonusPacks> <bonusPack name="mutant"> <maps refid="deathMatch" /> </bonusPack> <bonusPack name="lastManStanding"> <maps refid="deathMatch" /> </bonusPack> </bonusPacks> <skaarjpacks> <skaarjpack name="skaarjInvasion"> <!-- enthält sämtliche deathMatch maps, bis auf DM-Curse4 --> <maps refid="deathMatch"> <exclude>DM-Curse4</exclude> </maps> </skaarjpack> </skaarjpacks>
Man sieht also, UT hätte besser eine XML Konfiguration verwenden sollen.
-
c.rackwitz schrieb:
was ich meinte war:
die selbe arbeit, die ihr euch mit sun/MS java und XML machen muesst, um dateien zu validieren, die waere auch zu tun wenn man lisp daten validieren wollen wuerde. ich konnte es einfach nicht so stehen lassen, dass - ich weiss nicht mehr wer - xml schemas als etwas einfaches hinstellt, was man mit inis oder lisp daten nicht machen koennte. kann man naemlich. also ist es kein argument fuer xml.
Man könnte sicherlich auch einen Validierer für Lisp schreiben, aber für XML gibt es schon genügend, gibt es für Lisp auch schon einen?
c.rackwitz schrieb:
und weil hier doch von config dateien die rede ist, braucht man ja schon mal kein schema, weil nichts interoperieren muss. von mir aus kanns gerne auch ein binaerformat sein, so lange das programm sich selbst dann noch lesen kann.
Was ist mit verschiedenen Versionen eines Programmes? Oder was ist mit Config-Dateien, die ein Benutzer erstellt? Die müssen auch auf Gültigkeit überprüft werden und das kann man mittels XSL-Schema ganz leicht.
c.rackwitz schrieb:
das laesst sich dann aber schlecht vom menschen bearbeiten. deswegen bin ich auch gegen xml als config.
laesst sich mit primitiven texteditoren schwerer bearbeiten als conf oder ini.Darüber lässt sich streiten.
c.rackwitz schrieb:
so lange die daten keine baumstruktur haben, sind doch conf und ini perfekt. und wenn doch baumstruktur verlangt ist, wuerde ich s-expressions (lisp) vorziehen. die strapazieren das auge nicht mit meta-text wie "<attribute>", "<property>" oder diesen redundanten schliessenden tags. ein einfaches </> koennte es doch auch tun, ist dann aber wieder zu "uneindeutig", und das scheint manche zu beunruhigen.
Nach 100 Zeilen Xml-Tags bin ich ganz froh, das am Ende der Node ein </liste> steht, weil ich dann leichter sehe "Aha hier ist die Liste zuende". Bei S-Exps musst du dann die Klammern zählen, ich bezweifle das man sofort sehen kann ob bei )))))))) nun eine Klammer zu viel oder zuwenig ist.
Was ist meta-text? Meta-Informationen kommt bei XML in die Attribute der Tags.
-
optimizer. ich glaub du verstehst mich falsch. wenn ich von baumstruktur rede, dann meine ich, dass daten entweder baumstruktur haben oder nicht. und wenn sie die haben (siehe UT conf), dann soll man die auch baumartig repraesentieren. ich weiss nicht, warum ich das noch erklaeren soll.
-
Die ganze Dikussion ist mittlerweile irgendwie ziemlich sinnlos geworden, weil jeder auf gewisse Weise Recht hat. Es wurde nach einfachen Konfigurationsdateien gefragt. Die kann man natürlich weiterhin als ini Dateien mit flachen Name-Wert-Paaren schreiben. Natürlich macht auch XML Sinn bei größeren Datenmengen aufgrund der Möglichkeiten zur Strukturierung. Sicherlich ist aber XML auch nicht der heilige Gral. Es gibt sicher pro und contra für oder gegen XML und es bleibt jedem frei, eine alternative Datenbeschreibungssprache zu benutzen.
XML ist halt sehr anpassungsfähig, hat eine große Akzeptanz und einen riesigen Toolsupport. Das macht den Einsatz sehr attraktiv.
-
Optimizer schrieb:
Ok. Du kritisiertest, dass man ein Schema schreiben muss. Ich zeigte, dass man das nicht muss (für Konfigurationsdateien, wofür man inis üblicherweise verwendet). Was ist an der Lösung genau schlecht? Geht sie am Thema vorbei? Willst du unbedingt ein freakiges Schema schreiben und alle XML-Tricks für was simples auspacken, dich endlos verkünsteln? Was hat das überhaupt mit einer Programmiersprache zu tun gehabt?
Jetzt mal langsam... Schön für dich, dass es so einfach mit .NET geht. Ich kann mich aber nicht erinnern, dass es in diesem Thread um die Vorteile von .NET geht oder das wir hier gar im .NET Forum sind...
Für andere Sprachen bleibt einen nunmal nichts anderes übrig, als über ein XSD-Schema / DTD etc. zu validieren. Und warum ein Schema schreiben? Es gibt eine Latte von Programmen, die dir zu einer XML-Datei sehr strikte Schema generieren und das kostenlos!! Oder man klickt das Schema mit XMLSpy zusammen...
-
Jetzt mal im Ernst, bei über 1000 Zeilen Konfigurationen, da wird einem so oder so übel von Hand zu editieren.
Für so viele Einstellung wär ein GUI a la Systemsteuerung einfach das einfachste.
-
c.rackwitz schrieb:
minhen:
ich moechte hier mal einen theoretischen regulaeren ausdruck darstellen:([^<]+|<(\w+)>($$)</\2>)*
Da hast du durchaus recht. An eine Verschachtelung in der Tags sich selbst enthalten, habe ich in der Tat nicht gedacht, da ich damit praktisch auch nie zu tun hatte. Zumindest in Perl kann man dieses Problem aber auch einfach lösen ohne auf reguläre Ausdrücke verzichten zu müssen. Denn in Perl kann man auch Programmcode in reguläre Ausdrücke einbetten welcher auf das bisher gerade Gematchte zugreifen kann als auch das weitere Matching, das weitere Suchmuster beliebig verändern kann. Damit ist es relativ einfach einen Zähler für öffnende und schließende Tags in den regulären Ausdruck einzubauen und das Problem somit zu lösen.
Der Grundgedanke bei einem solchen Zähler ist letztlich der selbe wie beim Parsing mit einem Kellerautomaten, was ich ja schon angesprochen hatte. Einen solchen oder einen ähnlichen Mechanismus - man muss ja bei weitem keinen formalen Kellerautomaten implementieren nur um XML zu parsen - kann man relativ einfach implementieren. Das ist ja nun wirklich keine große Sache. Ich würde sogar behaupten, dass ein solcher auf keinen Fall komplizierter als die Lösung mit den regulären Ausdrücken ist. Selbige bieten sich in Perl halt schlicht an, aber das bedeutet nicht, dass man es in anderen Sprachen auch mit regulären Ausdrücken lösen muss oder kann. Ich würde sogar so weit gehen und behaupten, dass es ohne reguläre Ausdrücke vielleicht sogar einfacher zu lösen sein könnte. Denn was braucht man schon großartig um XML einzulesen? Einfachste String-Funktionen und eine Stack-artige Datenstruktur wie z.B. vector der STL reichen völlig aus. Damit kann man auch und gerade die von dir genannte "kompliziertere" Verschachtelung einwandfrei parsen.
Und darum ging es letztlich ja auch. Denn die Behauptung war doch, dass es wenige brauchbare Parser für XML gebe (was schlicht falsch ist) und dies daran liege, dass XML so ungeheuer schwer zu parsen sei. Mittlerweile sollte ja klar sein, dass dem nicht so ist.Was deine Schwärmerei für S-Expressions angeht, so frage ich mich doch, weshalb - sofern man der Wikipedia glauben schenken kann - es zwar als Standardvorschlag eingereicht aber nie als Standard angenommen wurde. Wenn es so unglaublich viele tolle Vorteile hat, stellt sich auch die Frage, weshalb es praktisch nicht verwendet wird und warum es lediglich einen Parser nur in C gibt. Aber auch wenn das Fragen sind, die einem sofort durch den Kopf gehen, ist deren Beantwortung letztlich doch nur von akademischen Interesse.
Denn Fakt ist einfach, dass die Unterstützung für XML einfach in allen Bereichen unglaublich riesig ist, während es für Alternativen wie S-Expressions praktisch nichts gibt. Alleine deshalb ist XML schon die erste Wahl.rüdiger schrieb:
Wo soll zB der Sinn von XSLT liegen? Wenn ich XML von A nach B umwandeln will, nehm ich eh Ruby oder Perl oder was weiß ich.
Was ist der Sinn von C++ wo es doch Objective-C gibt?
Oder wo soll der Sinn von verschiedenen Brotsorten liegen?
Dass es verschiedene Möglichkeiten gibt, etwas zu tun, ist nicht nur gut, sondern auch kein technisches Problem, und erst recht keins von XML, sondern ein menschliches.Bei den Browsern ist XSLT nicht weit genug verbreitet. IE4/5 behandeln das nicht standard konform, die meisten Exoten können es nicht (zB Opera, Dillo und Textbrowser). Ich glaub IE6 und Firefox sind die einzigen die das können.
Die XSLT-Unterstützung bei Browsern ist deutlich besser als z.B. die Unterstützung bzw das Vorhandensein von Flash-Plugins. Und dennoch reicht die Unterstützung von Flash offenbar für einen kommerziellen Einsatz aus. (Ich will jetzt nicht Flash gut reden, denn Flash ist schrecklich ;))
Das heißt die Verbreitung von XSLT bei Browsern ist mehr als ausreichend und sollte ohnehin irgendwo nahe bei 99% Verbreitungsgrad beim Endanwender liegen. Warum man XSLT dennoch nicht so einsetzen sollte, wie dir es vorschwebt, ist eine andere (auch ideologische) Sache, zu der es schon genug Threads gab.
Neben dem Internet Explorer und dem Firefox beherrschen zum Beispiel auch Opera und Safari einwandfrei XSLT. Opera, welcher jetzt schon seit geraumer Zeit XSLT unterstützt, hat dabei sogar die beste XSLT-Unterstützung überhaupt und Firefox dagegen eher eine zwar völlig ausreichende aber doch ziemlich minimale.XSLT ist nebenbei eine wirklich feine Sache, von der ich gerne Gebrauch mache. Meine private Webseite wird zum Beispiel auch aus XML+XSLT serverseitig erzeugt. Für Kleinigkeiten, die ich in XML abspeichere, verwende ich auch gerne XSLT.
So ist es einfach ungeheuer praktisch, wenn man einfach mal eben<veranstaltung> <titel>Irgendeine Vorlesung</titel> <dozent>Irgendein Professor (optional)</dozent> <url>Eine optionale URL-Angabe</url> <termin> <!-- gerne auch mehrere --> <tag>di</tag> <von>12</von> <bis>14</bis> <ort>Irgendwo in Europa</ort> </termin> </veranstaltung>
ausfülle und daraus automatisch mittels XSLT ein einwandfreier, schöner XHTML-Stundenplan generiert wird, der einem nicht nur alle Termine in üblicher Form (Uhrzeit für die Zeilen, Tage für die Spalten) präsentiert sondern auch Zusatzkram wie z.B. die Semesterwochenstundenzahl ausrechnet. Oder fand hier irgendjeman die Standard-Pläne seiner Uni brauchbar? Natürlich kannst du das auch mit einer anderen Programmiersprache erledigen. Aber XML+XSLT ist eben auch eine feine und direktere Möglichkeit.
Gibt es für XSL-FO eigentlich schon sinnvolle Darstellungsmöglichkeiten? Das letzte was ich davon gehört habe war, dass es absoluter Accessibility-Gift ist.
Da verstehst du etwas falsch. XSL-FO ist für den Druck, also für Print-Medien gedacht. Im Gegensatz dazu ist CSS für den Einsatz im WWW gedacht. XSL-FO und CSS sind also zwei Möglichkeiten XML zu visualisieren, aber mit zwei völlig verschiedenen Einsatzgebiet.
Wobei die Browser alles ein klein bisschen anders machen. So scheint es mir zumindest. Aber vielleicht findest du es ja leicht die ganzen XML-Sachen so hinzubekommen, das sie ohne Probleme zwischen 3 Browsern mit unterschiedlichen Renderern funktionieren.
Ich finde es zumindest nicht schwer. Wenn ich etwas für Browser mache, schreibe ich es standardkonform und damit sind automatisch Browser wie Opera und Firefox abgedeckt und glücklich. Wenn ich es veröffentlichen will, gibt's einfach ein CSS für den Internet Explorer dazu, welches die standardkonforme CSS überschreibt und für den IE hinhackt. Fertig. Ist nicht wirklich wild. Klar, die Extra-Wurst für den völlig verkorksten IE ist nervig, aber es hält sich in Grenzen.
Das betrifft aber ohnehin nur (X)HTML+CSS. Ich finde es interessant, dass du das hier als Kritikpunkt an XML darstellst.
-
minhen schrieb:
Das heißt die Verbreitung von XSLT bei Browsern ist mehr als ausreichend und sollte ohnehin irgendwo nahe bei 99% Verbreitungsgrad beim Endanwender liegen.
Sehen die Jungs von Blizzard wohl genauso (nur um mal ein Beispiel zu nennen):
http://www.worldofwarcraft.com/index.xml
-
ich würde einfachmal sagen, dass die maximale größe einer ini-datei auf 64 KB festgelegt ist! siehe: http://support.microsoft.com/kb/78346/de
xml-dateien können belibig groß werden, zum editieren werden keine administratorrechte benötigt und die syntax (aufbau) ist wesentlich flexibler. xml-dateien sind ebenfalls leicht zu parsen, z.b. beim .net framework, das ist alles dabei was man mit xml alles so anstellen könnte!
-
Höh, also jetz wird's ja schon konfus. Was hat das denn mit Administrator-Rechten zu tun?